锁的由来和基本概念
当我们在操作数据库时,可能由于多用户并发导致数据不一致性。而锁的出现就是通过禁止某些操作在一段时间之内来避免这种数据的不一致性。
共享锁
又称读锁(S),对某一资源加共享锁,自身可以读该资源,其他人也可以读该资源(也可以再继续加共享锁,即 共享锁可多个共存),但无法修改。要想修改就必须等所有共享锁都释放完之后。
排他锁
又称写锁(X),对某一资源加排他锁,自身可以进行增删改查,其他人无法进行任何操作。
共享锁与的排它锁的互斥
只有共享锁之间不互斥,其他情况均是互斥 。这里特别需要注意互斥是指不同事务间,同一事务不存在互斥。
共享锁与的排它锁的释放
事务提交或回滚或线程结束一起释放
共享锁与的排它锁的使用
排他锁在增删改操作中均会使用排他锁 以及查询语句中使用for update会使用到
共享锁在查询语句中使用lock in share mode 会使用到
查询语句默认不添加任何锁
补充
lock in share mode适用于两张表存在业务关系时的一致性要求,for update适用于操作同一张表时的一致性要求。