在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
答
MySQL没有其它数据库提供的output
或returning
条款的等价物。你最好的选择是临时表格:
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
作为主持人,您可以使用select查询替换“DELETE”作为“SELECT”,因此您必须在删除quary之前“选择”。 –
一个选项可能是使用触发器来捕获单独表中的已删除行。 – JRD