一、行级锁和表级锁的区别 SQL 语句
使用行级锁的 SQL 语句为:
UPDATE table_name SET column1 = value1 WHERE condition LOCK IN SHARE MODE;
使用表级锁的 SQL 语句为:
LOCK TABLES table_name READ/WRITE;
可以看出,使用行级锁需要在 SQL 语句中加上 LOCK IN SHARE MODE,而使用表级锁则需要在 SQL 语句中添加 LOCK TABLES 关键字。
二、行级锁和表级锁的使用
行级锁的使用:
SET AUTOCOMMIT=0; START TRANSACTION; SELECT * FROM table_name WHERE condition FOR UPDATE; UPDATE table_name SET column1 = value1 WHERE condition; COMMIT;
表级锁的使用:
LOCK TABLES table_name WRITE; UPDATE table_name SET column1 = value1 WHERE condition; UNLOCK TABLES;
可以看出,使用行级锁需要使用事务控制语句,而使用表级锁则需要显式地进行锁定和解锁。
三、表级锁和行级锁的区别
表级锁:
表级锁是针对整张表进行上锁,可以防止其它线程对整张表进行修改。当一个线程获得表级锁后,其它线程不能对该表进行更新、删除、插入等操作,会被阻塞。
表级锁的优点是简单、效率高,缺点是锁粒度大,当并发量高时容易出现锁等待的情况,从而导致性能下降。
行级锁:
行级锁是针对数据行进行上锁,可以在保证数据一致性的情况下提高并发度。当一个线程获得行级锁后,其它线程不能对该行进行更新、删除、插入等操作。
行级锁的优点是锁粒度小,可以提高并发度,缺点是实现复杂,需要维护更多的锁信息。
四、行锁和表锁的区别
行锁和表锁是行级锁和表级锁的简称,它们的区别与行级锁和表级锁的区别相同。
五、表锁和行锁的区别
表锁和行锁是表级锁和行级锁的简称,它们的区别与表级锁和行级锁的区别相同。
六、A级锁和C级锁的区别
A级锁和C级锁是MySQL的两种锁机制,它们的区别如下:
A级锁:在读取数据时,使用A级锁的事务在读取时将对数据行进行加锁,直到事务结束或者显式提交时才解锁。另外,对于SELECT ... FOR UPDATE 语句和其他使用 SELECT ... LOCK IN SHARE MODE 语句进行查询的事务,也会使用A级锁。
C级锁:在修改数据时,使用C级锁的事务将对数据行进行加锁,并在修改结束后立即解锁。这种锁的优点是锁粒度小,不会对其它并发操作造成太大的影响,缺点是实现复杂,占用更多的系统资源。
在MySQL 5.5之前,默认使用A级锁,在MySQL 5.5之后,默认使用C级锁。