- 悲观缩:顾名思义比较担心害怕,还没开始就怕出现并发,所以在处理sql之前就将表或具体数据给上锁。
- 使用for update测试
- 表数据
表结构
测试
- 1)sql:
set autocommit=0;
BEGIN;
SELECT * FROM `user` WHERE `name`='zhangsan' for UPDATE;
-- COMMIT; - 1-1)结果
查询不受影响,整表都被锁住
- 2)sql:
- 2-1)结果
- 条件为主键时条件行被锁,查询不受影响
-
总结:
当for update的条件字段为索引或者主键的时候,只会锁住索引或者主键对应的行。
而当for update的字段为普通字段的时候,Innodb会锁住整张表。
-
查询不受影响