数据库迁移就像数据库的版本控制,团队可以轻松修改和共享APP应用程序的数据库结构。 PHP Laravel框架中的Artisan命令行工具提供了与数据库迁移相关的命令。 由于项目是基于PHP Yaf框架开发的,因此在此主要记录项目中使用的另一个数据库迁移工具- Phinx。
Phinx主要具有以下特性: 可以在多个数据库之间移植。
独立于PHP框架。
简单的安装过程。
简单的命令行操作。
与其他各种PHP工具(Phing、PHPUnit )和Web框架集成。 请注意,使用Phinx rollback命令回滚指定版本时,rollback将对指定版本及更高版本的所有版本执行降级迁移。 (在生产环境中,建议不要写或注释down函数的内容,以免操作错误破坏生产环境中的数据库表或数据。)
安装和初始化
按如下所示使用Composer进行安装。 PHP composer.pharrequirerobmorgan/phinx
创建迁移目录db/migrations (验证目录是否具有读写权限) mkdir -p db/migrations
CD数据库/迁移
初始化Phinx并完成phinx.yml的配置。 vendor/jsdy/phinx init
创建迁移
通过运行以下命令创建迁移文件: PHP vendor/jsdy/phinxcreatemynewmigration
生成文件名格式为yyymmddhhmmss _ my _ new _ migration.PHP的迁移文件。 初始化文件的内容是什么? php
usephinxmigrationabstract migration;
classmynewmigrationextendsabstractmigration
{
//*
*变更方法。
*
* writeyourreversiblemigrationsusingthismethod。
*
* moreinformationonwritingmigrationsisavailablehere :
* http://docs.phinx.org/en/latest/migrations.html # the-abstract migration-class
*
* thefollowingcommandscanbeusedinthismethodandphinxwill
* automaticallyreversethemwhenrollingback :
*
*创建表
*重命名表
*添加列
*重命名列
* addIndex
*添加福reign密钥
*
* remembertocall ' create (or ' update ) (and NOT 'save ) )网络工作
*使用表类。
*/
公共函数更改(
{
}
}
变更函数
Phinx 0.2.0支持称为无损迁移的新功能。 只要在change函数中编写上方向转换的逻辑,Phinx就会在执行下方向转换时自动处理。 比如? php
usephinxmigrationabstract migration;
classcreateuserloginstableextendsabstractmigration
{
//*
*变更方法。
*
* moreinformationonthismethodisavailablehere :
* http://docs.phinx.org/en/latest/migrations.html # the-change-method
*
* uncommentthismethodifyouwouldliketouseit。
*/
公共函数更改(
{
//create the table
$ table=$ this-table (' user _ logins );
$table-addcolumn('user_id ',' integer ' ) )
-addcolumn('created ',' datetime ' ) )。
-create (;
}
//*
*迁移升级。
*/
公共函数up ()
{
}
//*
*迁移降级。
*/
公共函数下(
{
}
}
执行备份迁移时,Phinx会创建user_logins表,并在执行宕机迁移(回滚)时自动删除user_logins表。
请注意,如果change函数存在,up、down函数将被忽略。
Phinx只支持名为createTable的函数的无损迁移
重命名表
添加列
重命名列
addIndex
addForeignKey
如果函数不支持无损迁移,Phinx将在执行降级迁移(回滚)时抛出IrreversibleMigrationException异常。
up函数
运行php vendor/jsdy/Phinx migrate命令时,如果phinx检测到迁移文件尚未运行,它将自动运行迁移文件的up ()函数。 此函数主要描述对数据库进行哪些更改。
下函数
运行php vendor/jsdy/Phinx rollback命令时,phinx会在检测到迁移文件已执行时自动运行迁移文件的down ()函数。 此函数主要描述您希望在数据库中进行哪些恢复,以应对down函数的更改。
执行查询
可以使用execute ()、query )函数执行本机SQL语句。 其中execute ()函数返回受影响的行数,而query函数返回PDOStatement对象的结果集。 在项目中,如果没有特定的需要,可以用这种方法直接编写up、down函数。 因为Phinx只支持所有数据库共有的列类型,所以必须为特定于MySQL的列类型(如枚举、集、blob和json )部署MysqlAdapter类。
参考资料