gpt4 book ai didi

mysql - mysql在添加具有默认值的新列时是否锁定表以进行写入

转载 作者:行者123 更新时间:2023-11-29 02:39:15 25 4
gpt4 key购买 nike

如果我执行下面的 sql,mysql 会锁定整个表吗(在下面的操作完成之前不能进行写入)?在我看来是的,因为它必须修改所有行并添加默认值。然而,这个操作在一个有 100 万行的表上只用了 4 秒。

ALTER TABLE `user` ADD COLUMN `col1` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1;

然而,当我试图将操作分成 2 个单独的查询时(根据我不完全的理解试图减少表锁定时间),第二个查询运行了 100 多秒

ALTER TABLE `user` ADD COLUMN `col1` TINYINT(1) UNSIGNED; // happens instantly
UPDATE user set col1 = true ; // takes > 100 seconds

所以我想知道为什么在最终结果相同的情况下执行时间会有如此大的差异。

最佳答案

https://mysqlserverteam.com/mysql-8-0-innodb-now-supports-instant-add-column/ 上找到了答案使用 INSTANT 算法,innoDB 只需将新列与默认值一起添加到表元数据中。单个行没有被修改,因此在我提到的第一个查询中节省了时间。所有读取操作都使用表元数据中的默认值,任何写入操作都会重建行并在行本身中添加新添加的列。将单个 ALTER 操作分成 2 个很慢,因为后者正在修改每个单独的行

关于mysql - mysql在添加具有默认值的新列时是否锁定表以进行写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56269953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com