这是我需要的交易吗?

时间:2013-03-17 21:55:46

标签: mysql select transactions

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

我想执行以下SQL语句:

SELECT语句1

SELECT语句2

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

我想防止其他用户在任何语句之间输入新数据的可能性。

我已经阅读了MySQL手册,似乎我可以先锁定表格,但我对交易比较熟悉,我想知道围绕3个语句包装事务是否会实现我想要。我发现很难确定这可以通过阅读手册(或者它只是我......)来实现。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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