添加列和设置值

szqfcxe2  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(223)

我需要添加一个不为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);

但是我想知道是否有一种方法可以在一个查询中实现这一点,以减少所需的时间并避免锁定。

xwmevbvl

xwmevbvl1#

需要注意的几点:
这就去掉了一个 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”列,但我怀疑它不会为您带来任何好处,因为您希望稍后更改公式。

相关问题