Mysql 添加列并设置值

Mysql 添加列并设置值,mysql,locking,alter,Mysql,Locking,Alter,我需要添加一个不为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); 但我想知道是否有一种方法可

我需要添加一个不为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 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行。每个块都是它自己的事务。这将最小化更新期间的锁。更多讨论

(我非常同意草莓关于使用
十进制(8,2)
(或任何大小)来赚钱的说法。)


MySQL 5.7可以有一个“生成”列,但我怀疑它不会为您买任何东西,因为您希望以后更改公式。

注意,与钱有关的事情通常不是浮动的;这就是为什么会发明十进制。可能我会使用视图或触发器来实现这一点