前几天行锁和表锁的区别的一次分享交流中,同事问了一个关于锁行锁和表锁的区别的问题行锁和表锁的区别他提到,如果执行了SQL语句`SELECTFor Update`,锁住了某条数据,并且事务还没提交,那么如果有其行锁和表锁的区别他人在同一时间执行同样语句会怎么样他们讨论的是行锁和表锁的区别这篇文章将详细解答这个问题加的锁究竟是行锁还是表锁,这取决于SQL语句。
主键或唯一索引事务A锁定id=1的行,事务B尝试更新该行时会被阻塞,直到事务A释放锁 普通索引查询name=周星驰的行时,若条件与唯一性无关,可能会意外获得表锁,导致其他对age=22或age=23的更新也受阻 主键范围锁定id in 1,2的行,同样会阻塞针对这些id的其他事务 普通字段。
锁的类型取决于是否使用了索引或主键未使用索引或主键时,锁为表锁,反之则为行锁实例1展示,使用主键ID查询,后开启事务更新数据,更新被阻塞,说明锁住的是查询ID为1的行实例2中,通过另一条ID为2的数据更新,说明锁为表锁实例3索引,创建表时为age字段创建唯一索引,查询后开启更新。
表锁与行锁的写法与兼容性不同,表锁需要在解锁时使用特定命令,且commit与rollback无法解锁已上锁的表表锁的写法与行锁有明显差异,表锁的兼容性考虑了读锁与写锁对表的互斥操作,以及避免死锁的发生意向锁的作用在于优化性能,当数据库需要加表锁时,它会自动创建表级别的意向锁,这避免了与每。
1 GaussDB锁类型常规锁包括表锁relation和行锁tuple表锁在DDLDML操作时使用,行锁在select for share和更复杂的更新操作中应用,分为5级和7级轻量级锁主要保护数据库内部资源,如内存结构和共享内存2 锁冲突矩阵常规锁有8个等级,不同操作会引发不同锁冲突例如,ACCESS SHARE与。
还没有评论,来说两句吧...