mysql – 这是我需要的交易吗?

我有一个表正在收集用户输入的数据.

我想执行以下SQL语句:

SELECT语句1

SELECT语句2

我在2个select语句中读出的UPDATE表行

我想防止另一个用户在任何语句之间输入新数据的可能性.

我已经阅读了MySQL手册,似乎我可以先锁定表格,但我对事务更熟悉,我想知道围绕3个语句包装事务是否能实现我想要的.我发现很难确定这会在阅读手册中起作用(或者也许只是我……)

最佳答案 这里有两个可能的问题范围;事务(如果您使用支持事务的引擎,如InnoDB)将解决其中一个问题.

事务在启动事务时保持所有查询在数据库状态的快照上运行,并且在事务完成时全部或全部应用任何修改.这有效地解决了查询的交错和竞争条件.

但是,您声明要阻止用户在任何语句之间输入新数据.如果您希望确保提交请求的用户从当前数据开始,您需要实现自己的锁定机制,或者至少是一种方法来捕获请求之间的交错导致问题的情况.

基本上,事务只会帮助在并发请求中运行的查询.如果这种情况会出现问题:

> User1请求数据
> User2请求数据
> User1提交修改
> User2提交修改

如果User2能够在不知道User1所做的更改的情况下提交更改,则需要您自己的锁定系统;交易无济于事.这来自Web开发背景,其中每个步骤都是单独事务中的单独Web请求.

点赞