2013-03-17 72 views
4

我有一个表正在收集用户输入的数据。是我在这里需要的交易吗?

我要执行下面的SQL语句:我已经在2个select语句读出

SELECT语句1

SELECT语句2

更新表行

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

我已阅读MySQL手册,似乎我可以先锁定表,但我更熟悉事务,并且想知道是否在3条语句中包装事务将实现我想要的。我发现很难确定这将通过阅读手册(或者它只是我....)

+0

哪个MySQL引擎? – APC 2013-03-17 21:58:52

+0

InnoDB此刻 - 交易将起作用! – 2013-03-17 22:09:45

回答

2

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

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

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

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

  • 用户2请求数据
  • 用户1提交修改
  • 用户2提交修改
  • 当用户2能够提交自己的改变,而不

    1. 用户1请求数据了解User1所做的更改,您需要自己的锁定系统;交易不会有帮助。这是来自Web开发背景,每个步骤都是单独的事务中的单独Web请求。

    +0

    谢谢。这正是我所希望的。就我的目的而言,交易将起作用。 – 2013-03-17 23:39:11