mysql 中的共享锁与排他锁
- 1、共享锁(Shared Lock)
- 2、排他锁(Exclusive Lock)
💖The Begin💖点点关注,收藏不迷路💖
|
在MySQL的InnoDB存储引擎中,锁是管理并发访问数据的关键机制。主要有两种类型的锁:共享锁和排他锁。
1、共享锁(Shared Lock)
- 作用:允许多个事务同时读取同一数据,但不允许修改。
- 使用场景:适用于读多写少的场景,保证数据一致性读。
- 注意:可能导致死锁,尤其是在高并发环境下。
- 命令:执行如下SQL语句时,会为查询结果集中的每一行数据加上共享锁。
SELECT ... LOCK IN SHARE MODE;
例子:
-- 使用共享锁读取库存信息(假设库存表名为products)
SELECT * FROM products WHERE product_id = 123 LOCK IN SHARE MODE;
2、排他锁(Exclusive Lock)
- 作用:阻止其他事务读取或修改数据,直到锁被释放。
- 使用场景:需要读取并更新同一数据时,确保数据一致性和完整性。
- 注意:
- 仅适用于InnoDB,且必须在事务中。
- 使用索引锁定行,避免表锁。
- 会阻塞其他事务的读写操作。
- 命令:执行如下SQL语句时,会为查询结果集中的每一行数据加上排他锁。
SELECT ... FOR UPDATE;
例子:
-- 使用排他锁读取用户余额(假设用户表名为users)
SELECT balance FROM users WHERE user_id = 456 FOR UPDATE;
💖The End💖点点关注,收藏不迷路💖
|