位置: 编程技术 - 正文

yii2.0数据库迁移教程【多个数据库同时同步数据】(数据库如何迁移数据库表)

编辑:rootadmin

推荐整理分享yii2.0数据库迁移教程【多个数据库同时同步数据】(数据库如何迁移数据库表),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:数据库迁移语句,数据库迁移方案文档,数据库迁移方案文档,数据库迁移需要多长时间,数据库迁移软件,数据库迁移详细实施方案,数据库数据迁移到es,数据库迁移软件,内容如对您有帮助,希望把文章链接给更多的朋友!

本文讲述了yii2.0数据库迁移的方法。分享给大家供大家参考,具体如下:

创建迁移

使用如下命令来创建一个新的迁移:

必填参数 name 的作用是对新的迁移做一个简要的描述。例如,如果这个迁移是用来往多个数据库同一张表 ( 假设每个数据库都有news表 ) 添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令:

注意:因为 name 参数会被用来生成迁移的类名的一部分,所以该参数应当只包含字母、数字和下划线。

如上命令将会在 @app/migrations 目录下创建一个新的名为 m__addColumn_news.php 的 PHP 类文件。该文件包含如下的代码,它们用来声明一个迁移类 m__addColumn_news,并附有代码框架:

每个数据库迁移都会被定义为一个继承自 yiidbMigration 的 PHP 类。类的名称按照 m<YYMMDD_HHMMSS>_<Name> 的格式自动生成,其中

<YYMMDD_HHMMSS> 指执行创建迁移命令的 UTC 时间。

<Name> 和你执行命令时所带的 name 参数值相同。

在迁移类当中,你应当在 up() 方法中编写改变数据库结构的代码。你可能还需要在 down() 方法中编写代码来恢复由 up() 方法所做的改变。 当你通过 migration 升级数据库时, up() 方法将会被调用,反之, down() 将会被调用。如下代码展示了如何通过迁移类来创建一张 news 表:

注意:并不是所有迁移都是可恢复的。例如,如果 up() 方法删除了表中的一行数据,这将无法通过 down() 方法来恢复这条数据。有时候,你也许只是懒得去执行 down() 方法了,因为它在恢复数据库迁移方面并不是那么的通用。在这种情况下,你应当在down() 方法中返回 false 来表明这个 migration 是无法恢复的。

访问数据库的方法

迁移的基类 yiidbMigration 提供了一整套访问和操作数据库的方法。你可能会发现这些方法的命名和 yiidbCommand 类提供的 DAO 方法很类似。 例如,yiidbMigration::createTable() 方法可以创建一张新的表,这和 yiidbCommand::createTable() 的功能是一模一样的。

使用 yiidbMigration 所提供的方法的好处在于你不需要再显式的创建 yiidbCommand 实例,而且在执行每个方法的时候都会显示一些有用的信息来告诉我们数据库操作是不是都已经完成,还有它们完成这些操作花了多长时间等等。

如下是所有这些数据库访问方法的列表:

yiidbMigration::execute(): 执行一条 SQL 语句yiidbMigration::insert(): 插入单行数据yiidbMigration::batchInsert(): 插入多行数据yiidbMigration::update(): 更新数据yiidbMigration::delete(): 删除数据yiidbMigration::createTable(): 创建表yiidbMigration::renameTable(): 重命名表名yiidbMigration::dropTable(): 删除一张表yiidbMigration::truncateTable(): 清空表中的所有数据yiidbMigration::addColumn(): 加一个字段yiidbMigration::renameColumn(): 重命名字段名称yiidbMigration::dropColumn(): 删除一个字段yiidbMigration::alterColumn(): 修改字段yiidbMigration::addPrimaryKey(): 添加一个主键yiidbMigration::dropPrimaryKey(): 删除一个主键yiidbMigration::addForeignKey(): 添加一个外键yiidbMigration::dropForeignKey(): 删除一个外键yiidbMigration::createIndex(): 创建一个索引yiidbMigration::dropIndex(): 删除一个索引

提交迁移

为了将数据库升级到最新的结构,你应该使用如下命令来提交所有新的迁移:

这条命令会列出迄今为止所有未提交的迁移。如果你确定你需要提交这些迁移,它将会按照类名当中的时间戳的顺序,一个接着一个的运行每个新的迁移类里面的 up() 或者是 safeUp() 方法。如果其中任意一个迁移提交失败了,那么这条命令将会退出并停止剩下的那些还未执行的迁移。

对于每一个成功提交的迁移,这条命令都会在一个叫做 migration 的数据库表中插入一条包含应用程序成功提交迁移的记录,该记录将帮助迁移工具判断哪些迁移已经提交, 哪些还没有提交。

提示:迁移工具将会自动在数据库当中创建 migration 表,该数据库是在该命令的 yiiconsolecontrollersMigrateController::db 选项当中指定的。默认情况下,是由 db application component 指定的。

有时,你可能只需要提交一个或者少数的几个迁移,你可以使用该命令指定需要执行的条数,而不是执行所有的可用迁移。例如,如下命令将会尝试提交前三个可用的迁移:

你也可以指定一个特定的迁移,按照如下格式使用 migrate/to 命令来指定数据库应该提交哪一个迁移:

如果在指定要提交的迁移前面还有未提交的迁移,那么在执行这个被指定的迁移之前,这些还未提交的迁移会先被提交。

如果被指定提交的迁移在之前已经被提交过,那么在其之后的那些迁移将会被还原。

还原迁移

你可以使用如下命令来还原其中一个或多个意见被提交过的迁移:

注意:并不是所有的迁移都能被还原。尝试还原这类迁移将可能导致报错甚至是终止所有的还原进程。

重做迁移

重做迁移的意思是先还原指定的迁移,然后再次提交。如下所示:

yii2.0数据库迁移教程【多个数据库同时同步数据】(数据库如何迁移数据库表)

注意:如果一个迁移是不能被还原的,那么你将无法对它进行重做。

列出迁移

你可以使用如下命令列出那些提交了的或者是还未提交的迁移:

修改迁移历史

有时候你也许需要简单的标记一下你的数据库已经升级到一个特定的迁移,而不是实际提交或者是还原迁移。这个经常会发生在你手动的改变数据库的一个特定状态,而又不想相应的迁移被重复提交。那么你可以使用如下命令来达到目的:

该命令将会添加或者删除 migration 表当中的某几行数据来表明数据库已经提交到了指定的某个迁移上。执行这条命令期间不会有任何的迁移会被提交或还原。

自定义迁移

有很多方法可以自定义迁移命令。

使用命令行选项

迁移命令附带了几个命令行选项,可以用来自定义它的行为:

interactive: boolean (默认值为 true),指定是否以交互模式来运行迁移。当被设置为 true 时,在命令执行某些操作前,会提示用户。如果你希望在后台执行该命令,那么你应该把它设置成 false。

migrationPath: string (默认值为 @app/migrations),指定存放所有迁移类文件的目录。该选项可以是一个目录的路径,也可以是 路径别名。需要注意的是指定的目录必选存在,否则将会触发一个错误。

migrationTable: string (默认值为 migration),指定用于存储迁移历史信息的数据库表名称。如果这张表不存在,那么迁移命令将自动创建这张表。当然你也可以使用这样的字段结构: version varchar() primary key, apply_time integer 来手动创建这张表。

db: string (默认值为 db),指定数据库 application component 的 ID。它指的是将会被该命令迁移的数据库。

templateFile: string (defaults to @yii/views/migration.php),指定生产迁移框架代码类文件的模版文件路径。该选项即可以使用文件路径来指定,也可以使用路径 别名 来指定。该模版文件是一个可以使用预定义变量 $className 来获取迁移类名称的 PHP 脚本。

如下例子向我们展示了如何使用这些选项:

例如,如果我们需要迁移一个 forum 模块,而该迁移文件放在该模块下的 migrations 目录当中,那么我们可以使用如下命令:

全局配置命令

在运行迁移命令的时候每次都要重复的输入一些同样的参数会很烦人,这时候,你可以选择在应用程序配置当中进行全局配置,一劳永逸:

如上所示配置,在每次运行迁移命令的时候,backend_migration 表将会被用来记录迁移历史。你再也不需要通过 migrationTable 命令行参数来指定这张历史纪录表了。

迁移多个数据库

默认情况下,迁移将会提交到由 db application component 所定义的同一个数据库当中。如果你需要提交到不同的数据库,你可以像下面那样指定 db 命令行选项,

上面的命令将会把迁移提交到 db2 数据库当中。

偶尔有限时候你需要提交 一些 迁移到一个数据库,而另外一些则提交到另一个数据库。为了达到这个目的,你应该在实现一个迁移类的时候指定需要用到的数据库组件的 ID , 如下所示:

即使你使用 db 命令行选项指定了另外一个不同的数据库,上面的迁移还是会被提交到 db2 当中。需要注意的是这个时候迁移的历史信息依然会被记录到 db 命令行选项所指定的数据库当中。

如果有多个迁移都使用到了同一个数据库,那么建议你创建一个迁移的基类,里面包含上述的 init() 代码。然后每个迁移类都继承这个基类就可以了。

提示:除了在 yiidbMigration::db 参数当中进行设置以外,你还可以通过在迁移类中创建新的数据库连接来操作不同的数据库。然后通过这些连接再使用 DAO 方法 来操作不同的数据库。

另外一个可以让你迁移多个数据库的策略是把迁移存放到不同的目录下,然后你可以通过如下命令分别对不同的数据库进行迁移:

第一条命令将会把 @app/migrations/db1 目录下的迁移提交到 db1 数据库当中,第二条命令则会把 @app/migrations/db2 下的迁移提交到 db2 数据库当中,以此类推。

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

Yii2创建多界面主题(Theme)的方法 本文实例讲述了Yii2创建多界面主题(Theme)的方法。分享给大家供大家参考,具体如下:Yii2界面主题上的设计总体上和Yii1.x保持一致,区别在于两个地方

yii通过小物件生成view的方法 本文实例讲述了yii通过小物件生成view的方法。分享给大家供大家参考,具体如下:我们以manger为例子:在生成的models文件中,找到对应的表manger.php然后

Laravel Memcached缓存驱动的配置与应用方法分析 本文实例讲述了LaravelMemcached缓存驱动的配置与应用方法。分享给大家供大家参考,具体如下:Memcached缓存配置在任何php环境下我们都可以配置使用来提

标签: 数据库如何迁移数据库表

本文链接地址:https://www.jiuchutong.com/biancheng/301917.html 转载请保留说明!

上一篇:yii2高级应用之自定义组件实现全局使用图片上传功能的方法

下一篇:Yii2创建多界面主题(Theme)的方法

  • 农业免税收入怎么填纳税申报表
  • 生产企业出口货物劳务免抵退税申报明细表
  • 增量留抵退税会计处理
  • 餐饮业税务申报
  • 个体户银行开户是开公户还是私户
  • 核定征收可以不开免税普票吗
  • 个人保险发票能抵扣个税
  • 消费卡预付卡能入账吗
  • 其他应付款是不是长期负债
  • 银行收单业务员做什么的
  • 股权转让所得交所得税吗
  • 企业购进废旧厂房的分录
  • 现金存款账户
  • 企业拆迁补偿款会计分录
  • 所得税补缴自查需要缴纳什么
  • 企业的利润分配顺序
  • 资产总额小于所有者权益合计
  • 是否跨期
  • 孕妇可以喝蜂蜜水吗?
  • 固定资产进项税额怎么做账
  • 桌面图标被篡改怎么办
  • 新会计规定工会会计制度
  • 如何输入特殊符号带圈数字11
  • thinkphp5控制器
  • yii2开发文档
  • 宜搭下载
  • 投资性房地产成本法账务处理
  • 关税组成计税价格公式推导
  • 公司破产清算应先还银行还是股东
  • 滨州高新技术企业名单
  • python生成器定义
  • 借款利息记入短期借款吗
  • 固定资产一次性扣除政策
  • 待摊费用多久摊销一次
  • php.ini上传限制
  • 免税公司专用发票是什么
  • 增值税和个人所得税怎么算
  • 进项税额不得抵扣的情况
  • 待处理财产损益是备抵类科目吗
  • 固定资产费用化有什么影响
  • 企业与企业之间通过互联网进行产品
  • 企业所得税汇算清缴会计分录
  • 开个人劳务票需要本人去吗
  • 律师事务所收到专票能抵扣吗合法吗
  • 疫情期间免征什么税
  • 总公司委托分公司开票及收款
  • 一般纳税人增值税税率
  • 业务招待算什么费用
  • 固定资产的核算包括
  • 个体工商怎么申报
  • 国家也通过国有企业利用自己的财政资金
  • 会务费可以抵扣进项税额吗
  • 特许权使用费代扣代缴企业所得税
  • 神州战神bios怎么进
  • windows10怎么隐藏工具栏
  • xp系统卡到开机画面
  • 重装win8系统后没有声音
  • win8分盘怎么分
  • linux如何操作数据库
  • win2008远程桌面
  • 微软反盗xp黑屏怎么办
  • linux命令光标移动到末尾
  • windows mobile10
  • w10qq图标不显示
  • opengl画实体
  • 批处理中如何判断当前文件中是否存在一个子目录
  • Unity3D面试题整合
  • unity 读取txt
  • jquery常用
  • cmd pushd
  • javascript如何学
  • python遍历文本的每条数据
  • unity closestpoint
  • jquery获取file文件
  • python 字符 字符串
  • python 包 __init__
  • 全国国税税务机关是哪里
  • 发票专用章和公章编码一样吗
  • 湖北职称网上申请流程
  • 广西定额发票查询入口官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设