2010-06-24 74 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