数据库迁移学习笔记
数据库迁移实际上就是记录你的数据库从项目开始到结束的变化过程。
你的每次创建表、删除表、增加/修改 列等等,这种对数据库结构有影响的操作都应该创建一个数据库迁移文件。
比如你要新创建一个表,这个表叫comment表,用于记录用户评论,那么有两种选择。
一、在黑dos窗口中直接敲命令 create table comment(...);
二、使用先进的手段,数据库迁移。
具体怎么个迁移法呢
-
第一步执行
php artisan migration comment
,执行完之后在database/migration/
的目录下就生成了一个文件,这文件名会自动给你加上当前日期前缀,2018_07_09_143914_comment.php。 -
第二步打开文件,里面有个类,类中有两个空函数,一个up一个down,up代表你将要对数据库进行的更改操作,我们这里是要创建一个表,对吧,那我们就在up方法中写入创建表的代码,如下:
Schema::create('comment', function (Blueprint $table) { $table->increments('id'); $table->string('content'); $table->timestamps(); });
-
第三步执行
php artisan migrate
这条命令的作用就是执行迁移,也就是把你刚刚的文件里的up方法里的操作更新到数据库。然后打开数据库,你会发现已经创建好一个新的表了。 -
执行一次这样的命令就生成了一个comment表,那再执行一次会不会再生成一次?
试试再次执行,发现他很灵性的提示Nothing to migrate.
这是为啥,他咋知道已经创建好了comment表了,不用再次生成了,不应该是报错说comment表已存在之类的吗,原来我们的数据库在第一次执行迁移的时候自动创建了一个migrations表,里面记录了迁移的历史记录,哪些文件是已经迁移了的,会将文件名记录到这个表里,每次执行迁移的时候,会遍历
/database/migrations/
下的所有迁移文件,只对表中没有记录的文件进行迁移操作。
了解完迁移,再说下创建迁移文件的规范
比如之前我们创建comment表,我们直接执行的php artisan make:migration
comment 然而直接写comment不太清晰做了哪些更改,所以要根据将要进行的操作来命名数据库迁移文件,上面的创建表就应该改成php artisan make:migration create_table_comment
,这样创建出来的文件名就是2018_07_09_143914_create_table_comment.php 这样看起来会更加清晰和规范,其他的更新/添加字段什么的,也一样,添加字段时用add_fieldname_by_comment这样去创建
其他的配套小操作,
-
比如回滚,执行
php artisan migrate:rollback
会回滚最近的一次迁移,怎么回滚,就是执行你的迁移文件里面的down方法,所以,自己在创建表的文件里面的down方法也要加上Schema::dropIfExists('comment'); //从函数名就能看出代表删除对应的表
-
在 rollback 命令后加上 step 参数,你可以限制回滚迁移的个数。例如,以下命令将回滚最近五次迁移:
php artisan migrate:rollback --step=5
-
怎么看每次迁移了哪些文件?在migrations表中有一个batch字段,字段值相同的为同一次迁移,
migrate:fresh 命令会从数据库中删除所有表,然后执行 migrate 命令:
本作品采用《CC 协议》,转载必须注明作者和本文链接