如新语法的字面含义,NOWAIT表示当无法获取到锁时直接返回错误,而不是等待;SKIP LOCKED表示忽略那些已经被其他session占有行锁的记录。下面看测试:
测试 一
session 1 :
mysql> select * from t;
+----+
| a |
+----+
| 42 |
| 43 |
| 44 |
| 46 |
+----+
4 rows in set (0.00 sec)
mysql> delete from t where a=42;
Query OK, 1 row affected (0.01 sec)
session 2 :会话2 由于获取不到锁而直接报错
mysql> select * from t for update nowait;
ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.
测试 二
session 1 :
mysql> select * from t;
+----+
| a |
+----+
| 42 |
| 43 |
| 44 |
| 46 |
+----+
4 rows in set (0.00 sec)
mysql> delete from t where a=42;
Query OK, 1 row affected (0.01 sec)
session 2 :
mysql> select * from t for update skip locked;
+----+
| a |
+----+
| 43 |
| 44 |
| 46 |
+----+
3 rows in set (0.00 sec)
更多推荐
mysql 8.0 新特性:NOWAIT以及SKIP LOCKED
发布评论