ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MySQL的共享锁、排他锁、意向锁

2026/8/4 19:58:31 拓冰建站 浏览量
MySQL的共享锁、排他锁、意向锁 目录一、共享锁Shared Lock二、排他锁EXclusive Lock三、意向锁Intention LockMySQL锁的模式有三种共享锁、排他锁、意向锁意向共享锁、意向排他锁。一、共享锁Shared Lock共享锁Shared Lock又称S锁、读锁。针对行锁。当有事务对数据加读锁后其他事务只能对锁定的数据加读锁不能加写锁排他锁所以其他事务只能读不能写。主要为了支持并发读的场景读时不允许写操作。加锁方式select * from T where id1lock in share mode;释放方式commit、rollback;二、排他锁EXclusive Lock排他锁EXclusive Lock又称X锁、独占锁、写锁。针对行锁。当有事务对数据加写锁后其他事务不能再对锁定的数据加任何锁又因为InnoDB对select语句默认不加锁所以其他事务除了不能写操作外照样是允许读的尽管不允许加读锁。主要为了在事务进行写操作时不允许其他事务修改。加锁方式自动DML语句默认加写锁手动select * from T where id1for update;释放方式commit、rollback;三、意向锁Intention Lock意向锁Intention Lock又称I锁。针对表锁。当有事务给表的数据行加了共享锁或排他锁同时会给表设置一个标识代表已经有行锁了其他事务要想对表加表锁时就不必逐行判断有没有行锁可能跟表锁冲突了直接读这个标识就可以确定自己该不该加表锁。特别是表中的记录很多时逐行判断加表锁的方式效率很低。而这个标识就是意向锁。意向共享锁IS锁对整个表加共享锁之前需要先获取到意向共享锁。意向排他锁IX锁对整个表加排他锁之前需要先获取到意向排他锁。主要是为了提高加表锁的效率。加锁方式无法手动创建。表级读锁lock tableuser_inforead;表级写锁lock tableuser_infowrite;