MariaDB更改列类型会锁定表吗?

wd2eg0qa  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(118)

我一直在寻找更好的文档,当你改变列定义时,幕后会发生什么。
例如,我想将一个列类型从tinyint更改为int,而我的表有400多万条记录。
那么,运行alter table change query将锁定表吗?如果是,锁定类型是什么?
如有任何资源,敬请谅解,谢谢!

35g0bw71

35g0bw711#

需要更改数据存储方式的ALTER TABLE将锁定表、复制数据、重建索引并将新表交换到位。
在您的一个示例中,TINYINT占用存储中的1个字节;INT占用4个字节,需要“复制”。
VARCHAR上增加max,至少在保持在255以下时,并不真正需要改变存储,所以它可能只是(并且非常快地)改变表定义,而不复制数据。如果缩小max,则存在截断过长字符串的问题。
如果对列进行了索引,则基于类似的考虑,索引可能需要或不需要重建。
请参见pt-online-schema-change,了解一种在几乎没有停机时间的情况下使用ALTER创建大型表的方法。

相关问题