我有一个表正在收集用户输入的数据。是我在这里需要的交易吗?
我要执行下面的SQL语句:我已经在2个select语句读出
SELECT语句1
SELECT语句2
更新表行
我想防止其他用户在任何语句之间输入新数据的可能性。
我已阅读MySQL手册,似乎我可以先锁定表,但我更熟悉事务,并且想知道是否在3条语句中包装事务将实现我想要的。我发现很难确定这将通过阅读手册(或者它只是我....)
我有一个表正在收集用户输入的数据。是我在这里需要的交易吗?
我要执行下面的SQL语句:我已经在2个select语句读出
SELECT语句1
SELECT语句2
更新表行
我想防止其他用户在任何语句之间输入新数据的可能性。
我已阅读MySQL手册,似乎我可以先锁定表,但我更熟悉事务,并且想知道是否在3条语句中包装事务将实现我想要的。我发现很难确定这将通过阅读手册(或者它只是我....)
这里有两个可能的问题范围;交易(如果您使用支持交易的引擎,如InnoDB)将解决其中的一个问题。
事务在事务启动时保持所有查询都在数据库状态的快照上运行,并且在事务完成时应用所有修改或全部修改。这有效地解决了查询的交错和竞争条件。
但是,您声明要防止用户在任何语句之间输入新数据。如果您希望确保提交请求的用户从当前数据开始,那么您需要实现自己的锁定机制,或者至少需要一种方法来捕获请求之间交叉引发问题的情况。
基本上,事务只会帮助查询在并发请求中运行。如果这种情况下会出现一个问题:
当用户2能够提交自己的改变,而不
谢谢。这正是我所希望的。就我的目的而言,交易将起作用。 – 2013-03-17 23:39:11
哪个MySQL引擎? – APC 2013-03-17 21:58:52
InnoDB此刻 - 交易将起作用! – 2013-03-17 22:09:45