InoDB引擎的行锁:
一、共享锁
SELECT语句 LOCK IN SHARE MODE;
也叫读锁。针对同一条数据,多个事务读取操作可以同时加锁而互不影响 ,但是不能修改数据记录。
例:
事务1执行:SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
事务2也能顺利执行:SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
但是注意:如果查询条件不采用带索引的列,则会提升为表锁。
例如:
事务1执行:SELECT * FROM student WHERE score=99 LOCK IN SHARE MODE;(score列无索引)
事务2不能再执行上述查询操作。
UPDATE类的语句均不能同时执行。
二、排他锁
SELECT语句 FOR UPDATE;
加锁的数据,不能被其他事务加锁查询或修改(普通查询不影响)。
MyISAM引擎的锁:
一、读锁
加锁:LOCK TABLE 表名 READ;
解锁(将当前会话所有的表进行解锁):UNLOCK TABLES;
所有连接只能读取数据,不能修改(包含自身连接)。
二、写锁
加锁:LOCK TABLE 表名 WRITE;
解锁(将当前会话所有的表进行解锁):UNLOCK TABLES;
其他连接不能查询和修改数据。