表锁
#对数据表加锁
lock table tableName1 lockType, tableName2 lockType, ...;
lockType:
- read
- write
#解除锁
unlock tables;
#查看当前数据库表的加锁状态
show open tables;
筛选出加锁的表
show open tables where in_use >0;
#查看锁的获取次数和锁的竞争力度
show status like 'table_lock%';
- Table_locks_immediate:锁的获取次数
- Table_locks_waited:锁的竞争力度,值越大,说明锁的竞争越激烈,被阻塞的sql越多
#诠释概括
注意:
- 若一次sqlSession对table加了锁,那么当前sqlSession只能够对加锁的table进行操作,无法操作无锁的table;
读锁:
- 只阻塞写操作,不同事务之间的读操作不受影响
- 任何事务都无法对加读锁的数据执行写操作
写锁:
- 其他事务的读操作与写操作会被同时阻塞
- 当前事务可以对加写锁数据执行任意操作
行锁
#对查询语句的结果行加共享锁
select * from table where 行记录的索引字段 lock in share mode;
#对增删改语句需要操作的行记录加独占锁
select * from table where 行记录的索引字段 for update;