gpt4 book ai didi

mysql,一个用户删除,另一个用户更新,谁会赢?

转载 作者:行者123 更新时间:2023-11-29 05:33:38 25 4
gpt4 key购买 nike

问题是关于 mysql 事务的。

create table tbl1(
id integer,
val integer,
primary key (id)
);
insert into tbl1 (id, val) values (1,2);

我创建了两个同时工作的用户。

USER1                                         USER2
start transaction;

update tbl1 set val = 3 where id = 1;

delete from tbl2 where id = 1 and val = 3;

commit;

因此该行不会被删除。如何解决?我希望删除该行,因为删除查询晚于第一个用户的事务开始。

编辑:实际上行将被删除,所以没有解释为什么会这样。

最佳答案

@capoluca - 你有一个race condition .没有简单的、放之四海而皆准的答案可以解决这个问题。

  • 在您当前的代码中:

    a) 如果发生在更新之前,则不会进行删除

    b) 如果删除发生在交易期间,则删除将被“撤消”

    c) 如果“更新”事务完成之后发生删除,则删除

  • 一个解决方案是锁定表。

    这不一定适用于所有数据库,并且会对性能产生破坏性影响。

  • 另一种解决方案是简单地“不用担心”。这实际上是一个合理的选择,具体取决于您的业务需求。如果“删除”是批处理作业的一部分,它可能会工作得很好——在这种情况下,有问题的记录肯定迟早会被删除。

  • 另一种解决方案是将更新删除放在各自独立的事务中

请查看我上面引用的链接,看看什么最适合您的情况。

关于mysql,一个用户删除,另一个用户更新,谁会赢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572019/

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