mysql update nowait_MySQL 8.0新特性 -- nowait以及skip locked
如果某行記錄被事務鎖住了,select ... for update、或select ... for share事務對相同的行加鎖的時候必須等待,直到產生阻塞的事務釋放鎖。
為了避免等待事務釋放鎖定的行,nowait和skip locked選項可以被用于select ... for update或select ... for share語句:
·nowait:使用了nowait選項的鎖定讀操作,會立即執行,如果讀的記錄被鎖定了就會報錯
·skip locked:使用了skip locked選項的鎖定讀操作,會立即執行,如果讀的記錄被鎖定了就會從結果集移除該記錄。返回的數據是非一致性的。因此,不適用于常規的事務。
nowait和skip locked只適用于行級鎖。
nowait和skip locked對于基于語句的復制是不安全的。
# Session 1:
mysql> CREATE TABLE t (i INT, PRIMARY KEY (i)) ENGINE = InnoDB;
mysql> INSERT INTO t (i) VALUES(1),(2),(3);
mysql> START TRANSACTION;
mysql> SELECT * FROM t WHERE i = 2 FOR UPDATE;
+---+
| i |
+---+
| 2 |
+---+
# Session 2:
mysql> START TRANSACTION;
mysql> SELECT * FROM t WHERE i = 2 FOR UPDATE NOWAIT;
ERROR 3572 (HY000): Do not wait for lock.
# Session 3:
mysql> START TRANSACTION;
mysql> SELECT * FROM t FOR UPDATE SKIP LOCKED;
+---+
| i |
+---+
| 1 |
| 3 |
+---+
總結
以上是生活随笔為你收集整理的mysql update nowait_MySQL 8.0新特性 -- nowait以及skip locked的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 将行转换成对象_Vue简化版实现
- 下一篇: oracle不空顺序输出,Oracle应