我需要添加一个新列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);但我想知道是否有一种方法可以在单个查询中做到这一点,以减少所需的时间和避免锁定。
发布于 2018-11-14 10:49:41
需要注意的几件事:
这样就去掉了其中一个ALTERs:
ALTER TABLE myTable ADD COLUMN basePrice FLOAT(10,2) NOT NULL DEFAULT '0';
UPDATE myTable set basePrice = 0,9 * price;MySQL 8.0基本上可以立即添加一列。(仍然需要UPDATE。
pt-online-schema-change可以在几乎为零的锁定时间内完成任务。
UPDATE可以(应该)以块的形式完成,比如说1000行。每个块都是它自己的事务。这最大限度地减少了更新期间的锁定。更多讨论。
(我非常同意草莓使用DECIMAL(8,2) (或任何大小)赚钱的观点。)
MySQL 5.7可以有一个"generated“列,但我怀疑它不会给您带来任何好处,因为您希望稍后更改公式。
https://stackoverflow.com/questions/53208998
复制相似问题