gpt4 book ai didi

MySql InnoDB 在事务中递增并返回一个字段

转载 作者:行者123 更新时间:2023-11-29 02:57:09 24 4
gpt4 key购买 nike

在我的应用程序中,我想从 InnoDB 表中获取一个值,然后在单个事务中递增并返回它。我还想锁定我要更新的行,以防止另一个 session 在事务期间更改值。我写了这个查询;

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT @no:=`value` FROM `counter` where name='booking' FOR UPDATE;
UPDATE `counter` SET `value` = `value` + 1 where `name`='booking';
SELECT @no;
COMMIT;

我想知道隔离级别是否正确,是否需要“FOR UPDATE”语句。我做对了吗?

最佳答案

是的,无论你做什么都很好。

下面几行我直接引用了 MySQL 文档。

“如果您查询数据,然后在同一事务中插入或更新相关数据,则常规 SELECT 语句无法提供足够的保护。..要实现读取和递增计数器,首先使用 FOR UPDATE 执行计数器的锁定读取,然后递增计数器。例如:

SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;

A SELECT ... FOR UPDATE 读取最新的可用数据,在它读取的每一行上设置独占锁。因此,它设置了与搜索 SQL UPDATE 将在行上设置的锁相同的锁。

引用:

https://dev.mysql.com/doc/refman/5.6/en/innodb-locking-reads.html

关于MySql InnoDB 在事务中递增并返回一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29575826/

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