我正在表演SELECT ... FOR UPDATE
或 InnoDB 表的行级锁定。
我的目的是只有一个请求可以读取同一行。因此,如果两个用户同时请求相同的数据。其中只有一个人获取数据,即第一个触发查询的人。
但是我如何测试锁定是否已放置。因为我正在通过同时检索相同的数据并且两个用户都获取数据来测试它。
注意:我的表是InnoDB,我的查询在事务中执行,我的查询如下:
SELECT * FROM table_name WHERE cond FOR UPDATE;
我还需要检查其他事情才能使其正常工作吗?
打开 2 个 mysql 客户端会话。
在第 1 场会议上:
mysql> start transaction;
mysql> SELECT * FROM table_name WHERE cond FOR UPDATE;
... (result here) ...
1 row in set (0.00 sec)
在第 2 场会议上:
mysql> start transaction;
mysql> SELECT * FROM table_name WHERE cond FOR UPDATE;
... (no result yet, will wait for the lock to be released) ...
返回会话 1,更新所选记录(并释放锁定):
mysql> UPDATE table_name SET something WHERE cond;
mysql> commit;
回到会话 2:
1)要么显示锁定超时错误
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
2) 或显示结果
... (result here) ...
1 row in set (0.00 sec)
3)或者没有显示结果(因为相应的记录已被修改,所以不满足指定的条件)
Empty set (0.00 sec)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)