mysql-添加列并设置值

我需要添加一个新列NOT NULL,其值应与其他字段成比例.现在的比例是相同的,但将来可能会有所不同

现在,我当前的脚本

ALTER TABLE myTable ADD COLUMN (basePrice FLOAT(10,2) NULL);
UPDATE myTable set basePrice = 0,9 * price;
ALTER TABLE myTable MODIFY COLUMN (basePrice FLOAT(10,2) NOT NULL);

但我想知道是否有一种方法可以在单个查询中执行此操作,以减少所需的时间并避免锁定.

解决方法:

需要注意的几件事:

这摆脱了ALTER之一:

ALTER TABLE myTable ADD COLUMN basePrice FLOAT(10,2) NOT NULL DEFAULT '0';
UPDATE myTable set basePrice = 0,9 * price;

MySQL 8.0可以立即添加一列. (仍然需要更新.

pt-online-schema-change可以几乎以零锁定时间完成任务.

可以(应该)以1000行为大块来完成UPDATE.每个块将是其自己的事务.这样可以最大程度地减少更新过程中的锁定.更多讨论here.

(我非常同意Strawberry关于使用DECIMAL(8,2)(或任何大小)的交易.)

MySQL 5.7可以有一个“生成的”列,但是我怀疑它不会为您带来任何好处,因为您希望以后更改公式.

上一篇:php – mySQL – 使用mysqli应用行级锁


下一篇:java-通过锁进行链锁