读锁(共享锁):
针对同一份数据,多个读操作可以同时进行而不会互相影响。
某会话给某个表加了读锁,所有的回话都能对该表进行读操作,不能进行写操作,除非该会话释放读锁。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
在执行语句后面加上lock in share mode就代表对某些资源加上共享锁
命令行窗口1:
SELECT * from city where id = "1" lock in share mode;
命令行窗口2:
update city set name="666" where id ="1";
因为加上了行锁所以操作界面进入了卡顿状态,过几秒后
提示错误信息:
[SQL]update city set name="666" where id ="1";
[Err] 1205 - Lock wait timeout exceeded; try restarting transaction
写锁(排它锁):
当前写操作没有完成前,它会阻断其他写锁和读锁。
当前会话(会话0) 可以对加了写锁的表 进行任何操作(增删改查);
其他会话:对会话0中加写锁的表 可以进行增删改查的前提是:等待会话0释放写锁。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务