悲观锁定,我觉得数据很悲观。 我们在查询数据时进行锁定。 防止篡改其他线程,在对方获得锁定之前无法修改。
例如,有以下表格: status=1表示可以订购,status=2表示不能订购。 如果两个用户在同时进行中同时发现status=1,逻辑上都可以去新订单,但商品会超卖。
以下示例
会话1运行
会话2运行
此时,session2被屏蔽。 锁还在session1上,所以锁一直在等着。 如果session1未提交,session2将在一段时间后超时断开连接并报告
(1205、‘锁定等待时间输出扩展; 三重恢复事务' )错误,
可以通过设置innodb_lock_wait_timeout参数来控制具体的锁定等待时间。
此时,如果在session1中执行commit操作,session2将检索查询结果并将锁传递给session2。
我们还可以通过
可以进一步查看锁定信息。
乐观锁定与悲观锁定不同,乐观锁定由自己的程序实现,而不是由mySql本身实现。
乐观地锁定查询时不锁定,只在更新时检查版本号。
例如,如果查询goods表的版本为1,则更新此表时Sql为
其中的版本是查询时的版本号,每次更改时为版本1。 如果版本号不匹配,更新将无法成功。
总结
以上是这篇文章的全部内容。 希望本文的内容对大家的学习和工作有一定的参考学习价值。 感谢您对服务器主页的支持。
原文链接: https://www.PHP bulo.com/archives/1652