在mysql中,我可以在删除后返回删除的行吗?

问题描述:

如何在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

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

看起来我无法避免为此创建临时表。谢谢! –

尝试

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