gpt4 book ai didi

mysql - 关于MySQL内联更新的简单问题

转载 作者:行者123 更新时间:2023-11-29 22:54:05 24 4
gpt4 key购买 nike

我对这个问题有点困惑...出于同样的原因,我们使用事务,在应用我们的逻辑并更新数据库中的行之前,我们当然使用 LOCK IN SHARE MODE 来选择它。

但是我的问题是,是否存在数值的内联更新查询:即:

UPDATE table SET num1=num1+1, num2=num2-1 WHERE group='abc'

这会在不锁定行/使用事务的情况下提供始终准确的值吗?如果此查询与事务中的其他逻辑一起使用(这对于某些其他查询是“必需的”)会怎样。

最佳答案

是的,会的,因为 InnoDB 中完成的所有操作始终都在事务中。如果你不自己启动事务,InnoDB 会为你启动它,并且事务只持续一个语句。行操作始终是原子的。

In InnoDB, all user activity occurs inside a transaction. If autocommit mode is enabled, each SQL statement forms a single transaction on its own. By default, MySQL starts the session for each new connection with autocommit enabled, so MySQL does a commit after each SQL statement if that statement did not return an error. 

http://dev.mysql.com/doc/refman/5.6/en/innodb-transaction-model.html

顺便说一句,根据问题的其余部分...当您知道要更新一行时,您应该SELECT ... FOR UPDATE并继续并获取独占现在显式锁定,而不是稍后隐式锁定。共享模式锁旨在防止其他行获取排他锁,并且必须在修改该行之前升级,这在一定程度上增加了死锁的可能性。

关于mysql - 关于MySQL内联更新的简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com