当前位置: 代码网 > it编程>数据库>Mysql > mysql如何修改字段的长度锁表

mysql如何修改字段的长度锁表

2026年02月07日 Mysql 我要评论
mysql修改字段的长度锁表问题mysql(这里指5.6及其后续版本=)修改字段的长度锁表会锁表吗?答案是可能会但不一定会具体原理mysql 5.6 及以后版本扩大字段长度 支持 online ddl

mysql修改字段的长度锁表问题

mysql(这里指5.6及其后续版本=)修改字段的长度锁表会锁表吗?答案是可能会但不一定会

具体原理

  • mysql 5.6 及以后版本扩大字段长度 支持 online ddl in-place 模式,而这将不会锁表
  • varchar 表示可变长字符,所以实际每一行数据中都保存了这字段的实际字节长度,众所周知utf8使用三个字节保存,而utf8mb4使用4个字节,如果字节数小于255则可以使用1btyte保存,而超过255则需要使用2bype保存则就需要修改每一行数据,这将导致锁表

简单来说

  • 缩小字段长度会导致锁表
  • 扩展字段长度,如果扩大的字段长度所表示的字节不跨越255将不会锁表,否则锁表

实验

这是使用异常包含两万数据数据的表,字段初始长度为50(使用字符集为utf8)

  • 修改为85(最终最大字节长数为255),耗时28ms,不锁表

  • 还原回50,耗时3s429ms,锁表(这里根据耗时可以反推出进行了全表更新)

  • 再次修改为86(字节数跨越了255)耗时3s281ms,锁表

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com