首頁  >  問答  >  主體

mysql優化 - mysql innodb 表鎖,跪求dba大牛,解答

問題:
1.在innodb中沒有開啟交易而且autocommit=1的情況下,update,delete會不會造成鎖定表?

我在終端機開啟了兩個mysql會話,表t一共有350萬行資料

#單獨執行:

#
 会话1:update t set status=1 where id>1; 16.*秒
 会话2:update t set status=1 where id<3500000; 12.*秒

同時執行,我的理解:

**在我看来,这两条sql,同时执行,同时操作同一条记录的情况,只有一次**
**在innodb中update和delete都会隐式添加排它锁,那么就是说这两条sql同时执行,只会阻塞很短的时间,毕竟只有同时操作同一条记录的情况下,才会阻塞**

同時執行,測試結果:

两条sql,间隔执行时间,在半秒左右.
会话1先执行:update t set status=1 where id>1;16.*秒,没有变化 
会话2后执行:update t set status=1 where id<3500000; 28.* = 12.*秒+16.*秒


会话2先执行:update t set status=1 where id>1;12.*秒,没有变化 
会话1后执行:update t set status=1 where id<3500000; 28.* = 16.*秒+12.*秒

難道兩個sql,同時操作同一個記錄時,鎖表了?我的理解應該是只會阻塞很短的時間啊,畢竟只有一次同時操作同一條記錄,就好像,兩個人,a從1數到10,b從10數到1,無論是同樣的速度,還是不是一樣的速度,都只可能同時數到相同的數字一次啊

#
PHP中文网PHP中文网2705 天前721

全部回覆(1)我來回復

  • 仅有的幸福

    仅有的幸福2017-05-25 15:10:06

    一個sql就是一個事務,並不是說操作了1W筆記錄就是1W個事務,sql1鎖住所有>1的記錄,sql2會等待sql1釋放鎖

    回覆
    0
  • 取消回覆