Mysql 添加列并设置值
我需要添加一个不为NULL的新列,其值应与其他字段成比例。现在的比例是一样的,但将来可能会有所不同 到现在为止,我的当前脚本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); 但我想知道是否有一种方法可
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可以有一个“生成”列,但我怀疑它不会为您买任何东西,因为您希望以后更改公式。注意,与钱有关的事情通常不是浮动的;这就是为什么会发明十进制。可能我会使用视图或触发器来实现这一点