《深入浅出Mysql》—— 第二十章 锁问题

 

 

 

 

 

扫描二维码关注公众号,回复: 8861341 查看本文章

 

 

 

 

在如表 20-3 所示的例子中,一个 session 使用 LOCK TABLE 命令给表 film_text 加了读锁,这 个 session 可以查询锁定表中的记录,但更新或访问其他表都会提示错误;同时,另外一个 session 可以查询表中的记录,但更新就会出现锁等待。 

 

 

 

 

 当使用 LOCK TABLES 时,不仅需要一次锁定用到的所有表,而且,同一个表在 SQL 语句 中出现多少次,就要通过与 SQL 语句中相同的别名锁定多少次,否则也会出错!

 

 

 

 

 

 

 

 

 

 

 

 

 银行转帐就是事务的一个典型例子。 

 

 

 

 

 

 

 

 

 

应该由JAVA 代码来解决这种情况

 

 

 

 产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的隔离级别,让用户以一种更轻松的方式处理并发一致性问题。

 

 

 

 

 可以通过检查 InnoDB_row_lock 状态变量来分析系统上的行锁的争夺情况: 

 如果发现锁争用比较严重,如 InnoDB_row_lock_waits和 InnoDB_row_lock_time_avg 的值 比较高,还可以通过设置 InnoDB Monitors 来进一步观察发生锁冲突的表、数据行等,并分 析锁争用的原因

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

        

 

 

 

猜你喜欢

转载自www.cnblogs.com/JasonPeng1/p/12234430.html