gpt4 book ai didi

php - 有没有比事务更高效的方法?

转载 作者:可可西里 更新时间:2023-11-01 07:49:22 25 4
gpt4 key购买 nike

insert into table1 ...;
update table2 set count=count+1;

上面的代码向 table1 中插入了一些东西,如果成功,则更新 table2count 字段。

当然这种事情可以用事务来处理,但是事务需要锁表,在高并发的系统中效率会很低。如果您需要在该事务中更新多个表,情况可能会更糟。

你的解决方案是什么?

我正在使用 PHP,并以这种方式实现事务:

mysql_query('begin');

mysql_query($statement1);

mysql_query($statement2);
...
mysql_query('commit');

所以看起来那些 $statement 中引用的所有表都将被锁定?

最佳答案

事务(在 MySQL 的上下文中假定 InnoDB)不需要锁定整个表。

INSERT 将在没有间隙锁的情况下锁定单个行。

如果您在 WHERE 子句中的索引字段上提供相等或 IN 条件,UPDATE 也不会锁定任何间隙。

这意味着对于正确索引的表,INSERTs 不会相互阻塞,而 UPDATEs 只有在它们影响同一行时才会相互阻塞。

UPDATE 当然会锁定它影响的单个行,但由于它是事务中的最后一个操作,所以在提交操作后会立即解除锁定。

实际上需要锁定本身,以便两个并发更新将按顺序递增计数。

关于php - 有没有比事务更高效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139285/

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