跳转到主要内容

简介

Laravel 官方支持以下数据库:
  • MySQL / MariaDB
  • PostgreSQL
  • SQLite
  • SQL Server
你可以使用相同的连接配置来执行原生 SQL、Query Builder 或 Eloquent ORM。
本页主要讲述数据库连接的前置知识。实际查询请参阅 Query Builder,数据表结构管理请参阅 Migrations,初始数据填充请参阅 Seeding

配置

数据库配置集中存放在 config/database.php。 你可以通过 default 选择默认连接名,通过 connections 定义每个连接的详情。
.env 中至少要设置如下内容:
如果使用 SQLite,请设置 DB_CONNECTION=sqliteDB_DATABASE 的路径。

读写分离

如果希望将读操作(SELECT)与写操作(INSERT / UPDATE / DELETE)分派到不同主机,请在同一连接内配置 readwrite
sticky 设置为 true 后,在同一请求内写入后的读取会固定使用写连接。
在存在副本延迟的架构中,启用 sticky 可以降低刚写入后读到旧数据的风险。

Pooled PostgreSQL 连接

当你使用 PgBouncer 之类以事务模式提供连接池的托管 PostgreSQL 服务时,请配置 pooleddirect 选项。
启用 pooled 后,Laravel 会自动进行路由分派。 如果在应用代码中希望显式使用 direct 连接,请在连接名上追加 ::direct 后缀。

多数据库连接

你可以在 config/database.php 中定义多个连接,并通过 DB::connection() 进行切换。

执行 SQL 查询

DB 门面按不同的查询类型提供了专用方法。
不要将用户输入直接拼接到 SQL 字符串中。请务必使用绑定参数,避免 SQL 注入。

查询监听

如果要跟踪已执行的 SQL,请在服务提供者的 boot() 中注册 DB::listen()

事务

如果需要将多个更新作为一个单元处理,请使用 DB::transaction()。 一旦发生异常,Laravel 会自动回滚。
如果需要死锁重试,可以指定 attempts
如果需要手动控制,可以使用 beginTransaction / rollBack / commit

下一步

Query Builder

学习如何借助连接配置安全地构建查询。

Migrations

学习如何对已连接数据库的表结构进行版本管理。

Seeding

学习如何以可复现的方式填充开发与测试数据。
最后修改于 2026年7月18日