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

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

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

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

