mysql如何修改字段的長度鎖表
更新時間:2026年02月07日 09:49:12 作者:花開不識君
MySQL修改字段長度是否鎖表取決于具體操作,對于UTF8字符集,如果修改后字段長度的字節(jié)數(shù)不跨越255,則不會鎖表;如果跨越255,則可能會鎖表
mysql修改字段的長度鎖表問題
MySQL(這里指5.6及其后續(xù)版本=)修改字段的長度鎖表會鎖表嗎?答案是可能會但不一定會
具體原理
- MySQL 5.6 及以后版本擴大字段長度 支持 online ddl in-place 模式,而這將不會鎖表。
- varchar 表示可變長字符,所以實際每一行數(shù)據(jù)中都保存了這字段的實際字節(jié)長度,眾所周知utf8使用三個字節(jié)保存,而utf8mb4使用4個字節(jié),如果字節(jié)數(shù)小于255則可以使用1btyte保存,而超過255則需要使用2bype保存則就需要修改每一行數(shù)據(jù),這將導致鎖表。
簡單來說
- 縮小字段長度會導致鎖表
- 擴展字段長度,如果擴大的字段長度所表示的字節(jié)不跨越255將不會鎖表,否則鎖表
實驗
這是使用異常包含兩萬數(shù)據(jù)數(shù)據(jù)的表,字段初始長度為50(使用字符集為utf8)
- 修改為85(最終最大字節(jié)長數(shù)為255),耗時28ms,
不鎖表

- 還原回50,耗時3s429ms,
鎖表(這里根據(jù)耗時可以反推出進行了全表更新)

- 再次修改為86(字節(jié)數(shù)跨越了255)耗時3s281ms,
鎖表

總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決mysql報錯:1264-Out of range value for&nb
這篇文章主要介紹了解決mysql報錯:1264-Out of range value for column ‘字段‘ at row 1問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
mybatis-plus如何使用sql的date_format()函數(shù)查詢數(shù)據(jù)
這篇文章主要給大家介紹了關于mybatis-plus如何使用sql的date_format()函數(shù)查詢數(shù)據(jù)的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2023-02-02

