mysql 变更表yii2迁移

mhd8tkvw  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(155)

当我更新MYSQL 8.0.29+,我得到了新的默认算法.
INSTANT是MySQL 8.0.29的默认算法,而在此之前为INPLACE。
但XtraBackup不想使用此ALGO进行备份:
下面是关于这一点:
https://docs.percona.com/percona-xtrabackup/8.0/em/instant.html
当我在迁移中使用"addColumn"时。这是在运行AlterTable并将我的ALGO更改为INSTANT,我无法使用XtraBackup。
所以问题是:
我如何在yii2中运行这样的迁移?:
"mysql〉修改表sbtest1添加列h int(11)默认为null,算法= inplace;"
在这种结构中:
$this-〉添加列("sbtest","h",$this-〉整数(11));
或者你知道更好的解决办法。
谢谢
$this-〉添加列("sbtest","h",$this-〉整数(11));

6jygbczu

6jygbczu1#

yii\db\ColumnSchemaBuilder有一个方法append(),允许你把任何你想附加到列类型的SQL片段,所以,你可以试着像这样添加它:

$this->addColumn('sbtest', 'h', $this->integer(11)->append(', ALGORITHM=INPLACE'));

但是有一个问题,位置语句(FIRSTAFTER ...)和CHECK语句是在append()部分之后添加的,所以append()只有在不使用first()after()check()方法的情况下才有效。
另一种选择是给予ColumnSchemaBuilder,而简单地将类型写成string:

$this->addColumn('sbtest', 'h', 'INT(11) DEFAULT NULL, ALGORITHM=INPLACE');

相关问题