2010-06-24 80 views
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; 

回答

0

如果你一步做一步,这些你有步骤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; 
+0

嗯,我真的需要第一次查询的结果,因为这个交易可以通过不同的请求在同一时间被称作...... 这就是为什么我把它放在一个单笔交易。 – ibram 2010-06-24 10:06:59

+0

您仍然可以在一个事务中运行它。只要做BEGIN和SELECT,得到结果集并执行UPDATE和COMMIT。 只要BEGIN和COMMIT之间的时间相当短,你可以做任何你想要或需要在两者之间。 (核对一下自动提交您的驱动器禁用) – 2010-06-24 10:20:25

+0

好了,但我还是不明白:)你能和你的解决方案编辑我的代码? 我第一次到MySQL的交易... – ibram 2010-06-24 11:10:53