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

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

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

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL正則表達(dá)式regexp_replace函數(shù)的用法實例
regexp_replace的使用非常靈活,且容易忘記,故做此筆記,下面這篇文章主要給大家介紹了關(guān)于MySQL正則表達(dá)式regexp_replace函數(shù)的用法實例,需要的朋友可以參考下2022-09-09
MySQL判斷查詢條件是否包含某字符串的7種方式總結(jié)
SQLServer數(shù)據(jù)庫死鎖是指在多個事務(wù)同時訪問數(shù)據(jù)庫資源時,發(fā)生了互相等待對方所持有資源的情況,導(dǎo)致所有事務(wù)無法繼續(xù)執(zhí)行的現(xiàn)象,這篇文章主要給大家介紹了關(guān)于MySQL判斷查詢條件是否包含某字符串的7種方式,需要的朋友可以參考下2024-07-07
MySQL中的LENGTH()函數(shù)用法詳解與實例分析
MySQL LENGTH()函數(shù)用于計算字符串的字節(jié)長度,區(qū)別于CHAR_LENGTH()的字符長度,適用于多字節(jié)字符集(如UTF-8)的數(shù)據(jù)驗證、截取及遷移優(yōu)化,需注意NULL和編碼影響,本文給大家介紹MySQL中的LENGTH()函數(shù)用法詳解與實例分析,感興趣的朋友一起看看吧2025-07-07
MySQL數(shù)據(jù)庫遷移快速導(dǎo)出導(dǎo)入大量數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于MySQL數(shù)據(jù)庫遷移快速導(dǎo)出導(dǎo)入大量數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
淺談開啟magic_quote_gpc后的sql注入攻擊與防范
通過啟用php.ini配置文件中的相關(guān)選項,就可以將大部分想利用SQL注入漏洞的駭客拒絕于門外2012-01-01

