Rails之migration总结

接触过Ruby On Rails(后面简称Rails)的知道,rails有一个数据库结构变更的rake命令,它就是rake db:migrate,我们来根据Rails guide看看它是怎么使用的。

在介绍db:migrate之前,我们先了解一下什么是migration,它的中文意思是“移民”,动词的意思就是“迁移”,很明显是数据库的变迁,在rails项目中,数据库变迁的文件存放在db/migrate文件夹中:


至于这些文件的内容,以及migration文件怎么编写,这里就不多说了,我主要想说一下,生成了这些文件之后,db:migrate命令怎么用。

首先说下怎么生成migration文件,也就是怎么生成一个数据库变迁。

我们看看文件的命名,都是一组数字加一些英文名,数字代表什么意思呢?这些数字就是数据库变迁版本,这些数字是存放在schema_migrations这个表里。


如果我们执行了某个数据库变迁,那么这个变迁版本(version)就在这个表里,insert一条数据。

mysql> select * from schema_migrations
    -> ;
+----------------+
| version        |
+----------------+
| 20150413134401 |
| 20150426140418 |
| 20150427155752 |
| 20150428132403 |
| 20150504135547 |
| 20150505130504 |
| 20150617130600 |
+----------------+
7 rows in set (0.00 sec)

好了,migration就简单介绍到这,我们细细讲一些一些常用的用法:

rake db:migrate

这个是最常用的,就是执行未执行的数据库更改,换句话说,就是如果有version值没插入到schema_migrations表里,就会执行对应的变迁,如果执行成功,就会在表里插入对应的version值,下次如果再执行db:migrate 会先根据变迁查询数据库,如果变迁版本号在表里,就不执行,如果不在就执行。
虽然这个用法很好用,当项目到达一定级别的时候,不建议直接执行db:migrate,最好执行相应生成的sql语句,并把对应的版本手动插入版本号表里。
这个命令当然可以跟version值,比如:
rake db:migrate VERSION=20150428132403
这个命令是向前变迁,有没有回滚的命令呢?肯定有

rake db:rollback

这个命令也可以跟一些参数,比如:
rake db:rollback STEP=3,很明显它的意思是向后回滚3个版本的变更。

rake db:migrate:up/down VERSION=XXXXXXXXXXXXXX

这是一对组合命令,向前或者向后执行一个版本的变更,必须有VERSION这个参数。

以上这些是基本,也是最常用的命令。

还有一个命令:

rake db:migrate:status

跟grep同时使用,可以查看哪些变更版本号已经执行了变更,哪些版本号没有执行。当大型的项目,数据库变更比较多的时候,如果有一部分version没有插入,又不能一条一条的执行的时候,可以通过这个命令查看。








你可能感兴趣的:(Ruby,On,Rails,rails,dbmigrate,updown,collback,status)