既然会被阻塞为什么说他们是行级锁,而不是表级锁?行级锁和表级锁的区别是什么?能都举个例子
时间: 2024-04-26 21:23:30 浏览: 73
行级锁的实例
行级锁和表级锁是两种不同的锁定方式,它们的主要区别在于锁定的粒度不同。
行级锁是在行的级别上进行锁定的,即对于一张表中的每一行都可以单独地进行锁定。这种锁定方式可以避免并发操作时的冲突,提高并发性能。例如,如果两个事务分别对一张表中的不同行进行修改,那么它们之间不会产生互斥和阻塞的情况,因为它们锁定的是不同的行。
表级锁是在整个表的级别上进行锁定的,即对整张表进行锁定。这种锁定方式会阻塞其他事务对同一张表的访问,因此并发性能较差。例如,如果一个事务正在修改一张表中的一行,并且另一个事务想要对同一张表进行查询,那么它会被阻塞,直到第一个事务释放锁。
在MySQL中,默认情况下使用的是行级锁。这意味着在执行 `SELECT ... FOR UPDATE` 语句时,只会锁定查询结果集中的行,而不是整张表。因此,即使第一个会话中锁定了表中的某些行,其他会话仍然可以对表中的其他行进行修改或查询,而不会被阻塞。
举个例子,假设有一张名为 `user` 的表,其中包含用户的信息,包括用户名和密码。现在有两个事务,一个事务想要修改用户名为 "Alice" 的用户的密码,另一个事务想要查询用户名为 "Bob" 的用户的信息。如果使用行级锁,这两个事务可以并发执行,因为它们操作的是不同的行;如果使用表级锁,则第二个事务会被阻塞,直到第一个事务释放了表级锁。
阅读全文