首页 > 编程知识 正文

数据库悲观锁和乐观,mysql 存储过程 语法

时间:2023-05-06 15:30:29 阅读:34506 作者:343

悲观锁定,我觉得数据很悲观。 我们在查询数据时进行锁定。 防止篡改其他线程,在对方获得锁定之前无法修改。

例如,有以下表格: 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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。