php – 我是否需要(我将需要)锁定共享模式|在交易中进行更新?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 我是否需要(我将需要)锁定共享模式|在交易中进行更新?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我痛苦地试图理解如何编写最好的代码查询

直截了当的问题:我是否需要或者我是否需要在交易中明确写入LOCK IN SHAred MODE或FOR UPDATE(除了READ UNCOMMITTED之外)?

如果我有外部密钥,是否需要明确选择行以将锁应用于这些行,或者外键定义是否足够?

解决方法

简短的回答:绝对是的.

完整的答案:这取决于用例.也许在大多数情况下,InnoDb使用的认锁定就足够了.这些锁可确保您的数据在事务中保持一致.但这是一个需要使用SELECT锁定的场景… FOR UPDATE:

考虑您正在创建一个Web应用程序,其中会话数据存储在数据库中. Race condition is a concern谈到会话数据.虽然在使用文件存储会话数据时会满足这种担忧,但如果将它们移动到数据库,则有责任确保请求不会覆盖彼此的会话更改.在这种情况下,您需要使用FOR UPDATE从MysqL读取会话数据,以确保其他请求将等待此会话回写会话并提交事务,然后才能读取它.

[UPDATE]

以下是共享模式的用例:

如果要确保某些记录在事务结束时保持不变,则共享模式非常有用.例如当您在以前的事务中插入父记录时,尝试将具有外键的子记录插入父项时.在这种情况下,您将首先选择在共享模式下锁定的父记录,然后尝试插入子项以确保在插入子项时,父项仍然存在.这样,其他会话仍然可以读取父记录,但没有人可以更改它.这只是我的想法,但在共享模式锁的所有使用情况下,这个事实仍然是相同的,你希望记录保持不变,而其他人仍然可以阅读.

[UPDATE]

关于SERIALIZABLE的事务隔离级别,MySQL’s documentation非常清楚.如果以这种方式设置事务级别,并且还设置了SET autocommit = 0;,那么它就像REPEATABLE READ级别一样,最后用LOCK IN SHARE MODE写入所有选择查询(除非你明确提到FOR UPDATE).这意味着您将触摸的所有内容(显式或隐式)都将被锁定.那些在没有提及锁定或选择LOCK IN SHARED MODE的情况下被选中的那些被锁定在共享模式中,其余的处于独占模式.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 我是否需要(我将需要)锁定共享模式|在交易中进行更新?全部内容,希望文章能够帮你解决php – 我是否需要(我将需要)锁定共享模式|在交易中进行更新?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。