在thinkphp7中执行数据库迁移需确保database/migrations目录存在且含时间戳命名的迁移文件,.env中database_type配置正确;运行php think migrate:run按时间戳升序执行未应用迁移,失败不自动回滚;php think migrate:status查看执行状态;强制重跑需删记录或加--force参数(禁用于生产)。

在ThinkPHP7项目中执行数据库迁移,是为了将数据表结构变更同步到数据库,避免手动建表或修改SQL带来的遗漏和错误。
确认迁移环境已就绪
进入项目根目录,检查是否存在 database/migrations 目录。该目录必须存在且包含至少一个以时间戳开头的迁移文件(如 20240315092345_create_user_table.php),否则迁移命令会提示“no migrations found”。
确保 【.env 文件中 DATABASE_TYPE 已设为实际使用的数据库类型(如 mysql、pgsql 或 dm)】,ThinkPHP7 的迁移器会据此加载对应驱动;若此处写错(例如填成 sqlite 但实际连的是 MySQL),迁移过程会报连接失败且不提示具体原因。
执行迁移命令
在终端中运行:
php think migrate:run
该命令会按文件名时间戳升序执行所有未执行过的迁移文件。每成功执行一个迁移,会在数据库的 think_migrations 表中插入一条记录,标记其已应用。
如果迁移中途失败(例如某字段重复、约束冲突),命令会立即终止,已执行的迁移不会自动回滚——【ThinkPHP7 默认不支持迁移回滚】,必须手动修复 SQL 或编写逆向迁移文件再重试。
查看迁移状态
输入以下命令可列出所有迁移文件及其执行状态:
php think migrate:status
输出中 “Yes” 表示已执行,“No” 表示待执行。注意:此命令不校验表结构是否与迁移文件完全一致,仅比对是否在 think_migrations 表中登记过。
强制重新执行某次迁移(慎用)
方法一:删除 think_migrations 表中对应记录后再次运行 php think migrate:run;
方法二:使用 --force 参数跳过状态检查(仅适用于开发环境):
php think migrate:run --force
⚠️ 此操作会无视已执行记录,重复执行所有迁移文件,可能导致主键重复、字段冲突等致命错误,生产环境严禁使用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











