mysql優(yōu)化 - mysql innodb表鎖問(wèn)題
問(wèn)題描述
經(jīng)過(guò)測(cè)試之后,我發(fā)現(xiàn)以下情況都會(huì)導(dǎo)致表鎖 1.like 2.update,delete無(wú)條件的操作 3.update,delete有條件的操作但不是主鍵的操作select無(wú)論是有條件還是無(wú)條件,條件是不是主鍵或者索引,都不會(huì)鎖表,請(qǐng)問(wèn)這是對(duì)的嗎?是不是我測(cè)試出現(xiàn)了問(wèn)題?
問(wèn)題解答
回答1:select 可指定加各級(jí)鎖如共享鎖、排他鎖等,比如select ... FOR UPDATE。至于為什么需要鎖,舉個(gè)簡(jiǎn)單例子,比如你有個(gè)單據(jù)繼承自上個(gè)單據(jù),這時(shí)候你可以select加讀鎖,鎖定上個(gè)單據(jù),來(lái)防止其他人在你提交前對(duì)上個(gè)單據(jù)進(jìn)行修改,造成數(shù)據(jù)不一致。
回答2:只要條件不包含主鍵,或者包含主鍵但不是等號(hào)或IN,都會(huì)鎖全表的,這就包括了問(wèn)題中全部3種情況。
不管是鎖全表還是鎖幾行,select加讀鎖,update和delete加寫(xiě)鎖,至于什么是讀鎖、寫(xiě)鎖,可Google一下。至于細(xì)節(jié),還可以看下事務(wù)隔離級(jí)別,這里就不展開(kāi)了。
相關(guān)文章:
1. docker內(nèi)創(chuàng)建jenkins訪問(wèn)另一個(gè)容器下的服務(wù)器問(wèn)題2. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?3. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?4. css3 - 學(xué)習(xí)css構(gòu)建圖形時(shí),遇到一個(gè)很有意思的現(xiàn)象,具體代碼如下5. 極光推送 - Android app消息推送 百度 極光 個(gè)推 信鴿哪個(gè)好一些?6. javascript - js閉包作用域7. html5 - 百度echart官網(wǎng)下載的地圖json數(shù)據(jù)亂碼8. html - css 使用字體的時(shí)候,格式有什么特殊要求嗎?9. 微信開(kāi)放平臺(tái) - android 微信支付后點(diǎn)完成按鈕,后回調(diào)打開(kāi)第三方頁(yè)面,屏幕閃動(dòng),求解決方法10. javascript - echart+百度地圖
