gpt4 book ai didi

mysql - 如何在 MySQL 中使用事务来避免 "lost updates"?

转载 作者:行者123 更新时间:2023-11-28 23:09:40 28 4
gpt4 key购买 nike

A lost update occurs when two different transactions are trying to update the same column on the same row within a database at the same time. Typically, one transaction updates a particular column in a particular row, while another that began very shortly afterward did not see this update before updating the same value itself. The result of the first transaction is then "lost", as it is simply overwritten by the second transaction. --https://morpheusdata.com/blog/2015-02-21-lost-update-db

enter image description here

最佳答案

你有两种可能

  1. 在悲观锁定的情况下,如果你打算更新刚刚读取的数据,请选择更新。然后只有一个可以读取记录,直到当前事务完成,其他尝试选择更新,必须等待。
  2. 在乐观锁定的情况下,您制定更新语句,以便在选择和更新之间发生更改时,不会发生更新。在您的情况下,您可以使用:

    UPDATE product set quantity = 10 
    where id = 1 and quantity = <original quantity -- 7>

    如果没有更新预期的记录数,通常是1条,因为另一个进程同时更新了数量,那么你必须在更新前重复选择。你怎么知道有多少条记录被更新了?这取决于您用于执行数据库请求的技术,但根据我的经验,每个 Sql-Dbms 都会将该信息返回给其客户端。

关于mysql - 如何在 MySQL 中使用事务来避免 "lost updates"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46315232/

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