跳到主要内容

简述MySQL共享锁 、 排他锁 ?

参考答案:

MySQL中的共享锁(Share Lock,简称S锁)和排他锁(eXclusive Lock,简称X锁)是两种基本的锁类型,它们用于控制多个事务对同一资源的并发访问。

  1. 共享锁(Share Lock,S锁)

    • 也被称为读锁。当一个事务对一个数据资源(如表或行)加上共享锁时,其他事务也可以对这个资源加上共享锁,从而并发地读取数据。
    • 获准共享锁的事务只能读取数据,不能修改数据。
    • 在MySQL中,可以使用SELECT ... LOCK IN SHARE MODE语句来为查询结果集中的每行数据加上共享锁。
    • 如果其他事务已经为某个数据资源加上了排他锁,那么当前事务不能为其加上共享锁,必须等待排他锁释放。
  2. 排他锁(eXclusive Lock,X锁)

    • 也被称为写锁。当一个事务对一个数据资源加上排他锁时,其他事务不能对这个资源加上任何类型的锁(无论是共享锁还是排他锁),从而保证了数据的独占性。
    • 获准排他锁的事务既可以读取数据,也可以修改数据。
    • 在MySQL中,当事务进行写操作(如UPDATE、DELETE)时,会自动为涉及的数据资源加上排他锁。
    • 如果其他事务已经为某个数据资源加上了共享锁,那么当前事务不能为其加上排他锁,必须等待共享锁释放。

共享锁和排他锁的主要目的是确保数据的一致性和并发性。通过合理地使用这两种锁,可以避免多个事务同时修改同一数据资源,从而导致数据不一致的问题。同时,也允许多个事务并发地读取数据,提高了系统的并发性能。