西安网络建站,河北建设网,企业官网优化,微商来分销系统共享锁和排他锁 文章目录 共享锁和排他锁简介共享锁#xff08;Shared Lock, S Lock#xff09;简介原理使用方式加锁流程使用场景 排他锁#xff08;Exclusive Lock, X Lock#xff09;简介原理使用方式加锁流程使用场景 对比注意事项结论 简介
MySQL 中的共享锁和排他锁…共享锁和排他锁 文章目录 共享锁和排他锁简介共享锁Shared Lock, S Lock简介原理使用方式加锁流程使用场景 排他锁Exclusive Lock, X Lock简介原理使用方式加锁流程使用场景 对比注意事项结论 简介
MySQL 中的共享锁和排他锁是两种最基本的锁类型它们用于控制并发事务对数据库资源的访问事务隔离以保证数据一致性和完整性。 共享锁Shared Lock, S Lock
简介
共享锁也被称为读锁。共享锁允许多个事务同时读取某一资源如一行或一张表的锁但不允许任何事务修改该资源。
原理
当一个事务对某资源加共享锁后其他事务可以继续对该资源加共享锁进行读取操作但不能加排他锁进行写入操作直到已释放所有共享锁。
使用方式
SELECT * FROM table_name WHERE condition LOCK IN SHARE MODE;在查询语句后面增加LOCK IN SHARE MODEMySQL会对查询结果中的每行都加共享锁。其他线程也可以读取使用了共享锁的表而且这些线程读取的是同一个版本的数据。
加锁流程
事务请求共享锁事务发出加共享锁的请求。加锁操作MySQL 检查是否有其他事务持有该资源的排他锁。如果没有则加共享锁成功。如果此时该资源被其他事务添加了共享锁当前事务会直接再次添加共享锁执行操作持有共享锁的事务可以读取该资源。释放锁事务提交或回滚后释放共享锁。
使用场景
需要多个事务同时读取同一资源而不希望被修改时例如并发查询操作。 排他锁Exclusive Lock, X Lock
简介
排他锁又称写锁是一种只允许一个事务独占访问某一资源的锁其他事务不能对该资源加任何类型的锁。
原理
当一个事务T对某资源添加了排他锁之后该事务T可以自由地读取和修改该资源。此时其他事务不能对该资源添加任何共享锁或者排他锁即无法对该资源进行读取和修改直到事务 T 的排他锁被释放。这样保证了写操作的完整性和独立性。
使用方式
SELECT * FROM table_name WHERE condition FOR UPDATE;在查询语句后面增加FOR UPDATEMySQL会对查询命中的每条记录都加排他锁当没有其他线程对查询结果集中的任何一行使用排他锁时可以成功申请排他锁否则会被阳塞。
加锁流程
事务请求排他锁事务发出加排他锁的请求。加锁操作MySQL 检查是否有其他事务持有该资源的共享锁或排他锁。如果没有则加排他锁成功。执行操作持有排他锁的事务可以读取和修改该资源。释放锁事务提交或回滚后释放排他锁。
使用场景
需要独占访问和修改某一资源时例如更新操作、删除操作。 对比
特性共享锁 (S Lock)排他锁 (X Lock)锁定粒度行级、表级行级、表级并发性高允许多个事务同时读取低独占访问其他事务无法读取或修改使用场景并发读操作独占写操作锁兼容性与其他共享锁兼容不与排他锁兼容与任何其他锁都不兼容 注意事项
使用锁时需要注意死锁的可能性。死锁是指两个或多个事务在等待对方释放锁导致所有事务都无法继续执行的情况。InnoDB存储引擎有自动死锁检测和解决机制但设计数据库操作时仍需谨慎。锁的使用需要平衡并发性和数据一致性的需求。过度使用锁可能会降低数据库的并发性能不当的锁使用可能会导致数据不一致。 结论
共享锁和排他锁是 MySQL 中实现并发控制的基本机制。共享锁允许多个事务并发读取资源而排他锁确保单个事务独占访问和修改资源。根据具体需求选择合适的锁类型可以有效地提高数据库的并发性能和数据一致性。