1. 什么是数据库迁移(Migration)?
-
简单解释:
数据库迁移是一种管理数据库结构的方式。它通过编写代码来定义数据库表的结构(比如字段名称、类型等),而不是手动操作数据库工具(如 phpMyAdmin 或 MySQL Workbench)。这样可以让团队协作更方便,并且可以轻松地在不同环境中同步数据库。 -
类比:
想象你在搭积木,每块积木代表一个数据库表或字段。如果每次都要手动摆放积木,可能会很麻烦,而且容易出错。而迁移就像是一个说明书,告诉你如何一步一步搭建积木,确保每个人都能按照相同的步骤完成。
2. 运行命令发生了什么?
当你运行以下命令:
php artisan migrate
会发生以下事情:
(1) 读取迁移文件
Laravel 会检查 database/migrations
目录下的所有迁移文件。这些文件是通过 php artisan make:migration
命令生成的,每个文件都定义了一个数据库表的结构。
(2) 执行迁移
Laravel 会按照文件的时间戳顺序依次执行这些迁移文件中的指令。例如:
- 创建新表。
- 添加字段。
- 修改字段类型。
(3) 更新数据库
Laravel 会将迁移的结果保存到数据库中,通常会在一个名为 migrations
的表中记录哪些迁移已经执行过。
3. 迁移文件是如何产生的?
让我们一步步拆解迁移文件的产生过程。
(1) 创建迁移文件
运行以下命令:
php artisan make:migration create_users_table
这会在 database/migrations
目录下生成一个文件,文件名类似于:
2023_10_01_123456_create_users_table.php
文件名中的时间戳(2023_10_01_123456
)用于确定迁移的执行顺序。
(2) 文件内容
生成的文件看起来像这样:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
4. 迁移文件的关键部分
让我们拆解一下这个文件的内容:
(1) up()
方法
-
作用:
这是你定义数据库表结构的地方。当运行php artisan migrate
时,Laravel 会调用这个方法,按照你的指令创建或修改表。 -
示例逻辑:
在上面的例子中,up()
方法创建了一个名为users
的表,包含以下字段:id
:主键字段。name
:字符串字段。email
:唯一字符串字段。timestamps()
:自动添加created_at
和updated_at
字段。
-
类比:
想象你在设计一张表格,表格的每一列代表一个字段。up()
方法就像是你告诉打印机:“请帮我打印一张表格,第一列是 ID,第二列是名字,第三列是邮箱。”
(2) down()
方法
-
作用:
这是用来撤销迁移的。如果你运行php artisan migrate:rollback
,Laravel 会调用这个方法,删除之前创建的表或字段。 -
示例逻辑:
在上面的例子中,down()
方法删除了users
表:Schema::dropIfExists('users');
-
类比:
想象你在清理房间,把之前搭好的积木拆掉。down()
方法就是用来“拆除”数据库表的。
5. 迁移的工作流程
让我们从头到尾演示一遍完整的迁移过程。
(1) 创建迁移文件
运行命令:
php artisan make:migration create_users_table
(2) 编辑迁移文件
打开生成的文件,修改如下:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->integer('age')->nullable(); // 新增字段
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
(3) 运行迁移
运行以下命令:
php artisan migrate
Laravel 会根据 up()
方法的指令,在数据库中创建 users
表。
(4) 查看结果
打开数据库管理工具(如 phpMyAdmin 或 MySQL Workbench),你会看到一个新的 users
表,包含以下字段:
id
name
email
age
created_at
updated_at
(5) 回滚迁移
如果你想撤销迁移,可以运行以下命令:
php artisan migrate:rollback
Laravel 会调用 down()
方法,删除 users
表。
6. 总结
通过以上内容,你应该已经了解了以下几点:
- 迁移的作用:它是一种通过代码管理数据库结构的方式。
- 如何创建迁移文件:通过运行
php artisan make:migration
命令生成。 - 迁移文件的内容:
up()
方法:定义如何创建或修改表。down()
方法:定义如何撤销迁移。
- 迁移的执行流程:
- 运行
php artisan migrate
执行迁移。 - 运行
php artisan migrate:rollback
撤销迁移。
- 运行
7. 为什么使用迁移?
- 版本控制:迁移文件可以被提交到 Git 等版本控制系统中,方便团队协作。
- 跨环境同步:可以在开发、测试和生产环境中轻松同步数据库结构。
- 自动化操作:避免手动操作数据库工具,减少出错的可能性。