什么是迁移
迁移就像是数据库的版本控制。 团队可以共享和管理应用的数据库结构定义。 你或许有过在拉取代码后被要求「请在本地数据库手动加一列」的经历。迁移正好解决了这类问题。 迁移文件存放在database/migrations 目录,文件名包含时间戳,Laravel 据此决定执行顺序。
创建迁移文件
使用make:migration Artisan 命令:
create_posts_table 就会预置创建 posts 表的代码。
迁移结构
迁移类包含up 与 down 两个方法:
up:向数据库添加表、列、索引。down:撤销up的操作,用于回滚。
常见列定义方法
Blueprint 类内置多种列类型。
列修饰符
可以链式添加修饰符:向量列与索引
vector 方法会创建一个用于存储嵌入向量的 vector 列。请在 dimensions 中指定所用嵌入服务的输出维度。
pgvector 扩展的 PostgreSQL 连接,以及 MariaDB 11.7 及以上版本。在 PostgreSQL 上,请在创建向量列之前启用 pgvector。
vector 列上添加 index。该索引使用余弦距离。
dropVectorIndex。
在线创建索引
在大表上创建索引时,通常会在构建索引期间锁定表,导致读写操作被阻塞。在 MySQL 中,为索引或外键定义添加inplace 修饰符,即可使用 INPLACE 算法执行操作。
inplace 可以与 lock 修饰符组合使用,用于指定操作过程中的表锁定方式。指定 none 时,在 MySQL 允许的操作中可以继续进行读写。
INPLACE 算法以及所指定的锁模式。若在外键操作中使用 inplace,需要预先禁用外键约束。
执行迁移
用migrate 命令运行未执行的迁移。
回滚
回滚最近一次迁移批次:migrate:refresh 会重建所有表,既有数据会丢失,适合开发中的数据库重置。实战示例:创建 posts 表
以博客文章的posts 表为例。
1. 生成迁移
2. 编辑迁移
打开database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php:
3. 执行迁移
posts 表。
4. 后期追加列
后期添加列时不要修改已有迁移,而是新建迁移:迁移事件
每次迁移操作会派发事件,都继承Illuminate\Database\Events\MigrationEvent。
例如可监听
MigrationsEnded 在迁移完成后清理缓存:
下一步
数据库填充
了解如何为迁移创建的表填充示例数据。
Eloquent 入门
学习通过 Eloquent ORM 操作迁移创建的表。