表锁、行锁
一、表锁(MyISAM)
读锁(READ)会阻塞写,但不会阻塞读;写锁(WRITE)会把写锁和读锁都阻塞
读锁阻塞写,写锁阻塞读和写
1、查看加锁的表
SHOW OPEN TABLES
2、设置加锁
读锁
LOCK TABLE table_name1 READ
session1会话对某个表加 READ 锁后,当前会话仅可以读该表。
session2(其他session)会话可读该表但不可写,等待session1释放 READ 锁后,session2可继续 WRITE 操作
2. 写锁
LOCK TABLE table_name1 WRITE
3、解锁
UNLOCK TABLES
二、行锁(InnoDB)
InnoDB有行级锁,针对的是一个事务,只有当前事务commit之后,才会释放锁。其他事务才可获取到锁并且执行。如过有多个事务同时争抢同一条数据,其余数据就得等待。
需要注意:索引失效,转全表扫描,行锁边表锁。
行锁性能分析
SHOW STATUS LIKE 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0 | -- 当前等待锁的数量
| Innodb_row_lock_time | 13444 | -- 从系统启动到现在锁锁定总时长
| Innodb_row_lock_time_avg | 13444 | -- 每次等待所花费的平均时间
| Innodb_row_lock_time_max | 13444 | -- 等待最长的一次花费的时间
| Innodb_row_lock_waits | 1 | -- 系统到现在总公等待次数
+-------------------------------+-------+
标签:加锁,--,lock,数据库,---,读锁,Innodb,Mysql,row
来源: https://blog.csdn.net/m0_46537958/article/details/113810728