SELECT ... FOR SHARE;
(MySQL 8.0+,旧版用LOCK IN SHARE MODE
)。SELECT ... FOR UPDATE;
或自动加在UPDATE
/DELETE
语句中。LOCK TABLES table_name READ/WRITE;
(MyISAM默认)。FLUSH TABLES WITH READ LOCK;
实现,用于备份。SELECT * FROM t WHERE id BETWEEN 10 AND 20 FOR UPDATE;
。(10, 20]
)。ALTER TABLE
)与DML冲突。SELECT * FROM t WHERE id=1 FOR UPDATE;
。UPDATE
/DELETE
时自动加行级排他锁。锁类型 | 作用范围 | 典型场景 | 示例语句 |
---|---|---|---|
行级锁(S/X) | 单行 | 高并发读写 | SELECT ... FOR UPDATE |
表锁 | 整表 | MyISAM或批量操作 | LOCK TABLES ... WRITE |
间隙锁 | 索引间隙 | 防止幻读(RR级别) | 范围查询FOR UPDATE |
元数据锁 | 表结构 | DDL操作 | ALTER TABLE |
自增锁 | 自增列 | 插入自增主键 | INSERT INTO t VALUES(...) |
合理选择锁机制可有效平衡并发性能与数据一致性。建议优先使用InnoDB的行级锁,避免长事务和大范围锁,同时根据业务需求调整隔离级别。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。