- lock in share mode 就是共享锁
如果事务对某行数据加上共享锁之后,可进行读写操作;其他事务可以对该数据加共享锁,但不能加排他锁,且只能读数据,不能修改数据。 某个事物想进行修改数据操作,那他必须等其他事物的共享锁都释放完毕才能进行修改操作
- for update 排他锁,就是行锁
如果事务对数据加上排他锁之后,则其他事务不能对该数据加任何的锁。获取排他锁的事务既能读取数据,也能修改数据。
注:普通 select 语句默认不加锁,而CUD操作默认加排他锁。
例子:
下面例子的前提都是针对同一行数据。
1.同一行数据为前提,两个事物都进行共享锁查询
2.同一行数据为前提,一个事物进行共享锁查询,另一个事物进行修改
第一个占有着共享锁,第二个事物没法更新,必须等第一个事物释放才能进行更新
3.同一行数据为前提,一个进行共享锁查询,另一个先进行共享锁查询,然后update
同第二种,修改的事物就一直在转圈圈,等待事物1提交。事物1不提交,那事物2只能等到超时返回错误。
4.同一行数据为前提,当事物一获得共享锁,另一个事物是否可以获得排它锁