1
我想知道是否有可能从我的交易得到了选择查询的结果集一个结果。 Mysql返回表已更新,但返回0行。获取从MySQL交易
这是交易:
START TRANSACTION;
SELECT *, @A:=id FROM mailer_log LIMIT 0,10;
UPDATE mailer_log SET picked=1 WHERE [email protected];
COMMIT;
我想知道是否有可能从我的交易得到了选择查询的结果集一个结果。 Mysql返回表已更新,但返回0行。获取从MySQL交易
这是交易:
START TRANSACTION;
SELECT *, @A:=id FROM mailer_log LIMIT 0,10;
UPDATE mailer_log SET picked=1 WHERE [email protected];
COMMIT;
如果你一步做一步,这些你有步骤2
后的结果集如果您想的修改记录中的结果,你会必须再次进行查询。
这并不像听起来那么糟糕,因为所有的数据都在内存无论如何(除非你有百万条记录当然是有相同的ID),因为你只是检索和更新它们。
例中的Perl:
$dbh->begin_work;
$ary_ref = $dbh->selectall_arrayref("SELECT * FROM mailer_log WHERE id = '$a' LIMIT 0,10");
# ... do something interesting with the result set
$dbh->do("UPDATE mailer_log SET picked=1 WHERE id='$a'");
$dbh->commit;
嗯,我真的需要第一次查询的结果,因为这个交易可以通过不同的请求在同一时间被称作...... 这就是为什么我把它放在一个单笔交易。 – ibram 2010-06-24 10:06:59
您仍然可以在一个事务中运行它。只要做BEGIN和SELECT,得到结果集并执行UPDATE和COMMIT。 只要BEGIN和COMMIT之间的时间相当短,你可以做任何你想要或需要在两者之间。 (核对一下自动提交您的驱动器禁用) – 2010-06-24 10:20:25
好了,但我还是不明白:)你能和你的解决方案编辑我的代码? 我第一次到MySQL的交易... – ibram 2010-06-24 11:10:53