首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加列和设置值

添加列和设置值
EN

Stack Overflow用户
提问于 2018-11-08 21:43:51
回答 1查看 354关注 0票数 3

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

到目前为止,我的当前脚本

代码语言:javascript
运行
复制
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);

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

EN

回答 1

Stack Overflow用户

发布于 2018-11-14 10:49:41

需要注意的几件事:

这样就去掉了其中一个ALTERs:

代码语言:javascript
运行
复制
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“列,但我怀疑它不会给您带来任何好处,因为您希望稍后更改公式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53208998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档