2015-10-14 34 views
0

如何在mysql中返回以下查詢的已刪除記錄?在mysql中,我可以在刪除後返回刪除的行嗎?

DELETE t1 
FROM t1 
LEFT JOIN t2 on (t1.t2_id = t2.id) 
WHERE t2.id IS NULL OR t2.is_valid = false 

背景:

$ mysql --version 
mysql Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using EditLine wrapper 
+1

作爲主持人,您可以使用select查詢替換「DELETE」作爲「SELECT」,因此您必須在刪除quary之前「選擇」。 –

+0

一個選項可能是使用觸發器來捕獲單獨表中的已刪除行。 – JRD

回答

1

MySQL沒有其它數據庫提供的outputreturning條款的等價物。你最好的選擇是臨時表格:

CREATE TABLE TheDeletedIds as 
    SELECT t1.id 
    FROM t1 LEFT JOIN 
     t2 
     ON t1.t2_id = t2.id 
    WHERE t2.id IS NULL OR t2.is_valid = false; 

DELETE t1 
    FROM t1 
    WHERE t1.id IN (SELECT id FROM TheDeletedIds); 

然後你剛剛創建的表格就有你想要的id。

注意:使用新創建的表格進行刪除很重要。否則,另一個線程/進程可能會在捕獲ID時與刪除它們之間更改數據。

+0

看起來我無法避免爲此創建臨時表。謝謝! –

0

嘗試

DELETE t1 OUTPUT DELETED.* 
FROM t1 
LEFT JOIN t2 on (t1.t2_id = t2.id) 
WHERE t2.id IS NULL OR t2.is_valid = false