📅  最后修改于: 2023-12-03 15:36:17.113000             🧑  作者: Mango
在数据库中,我们有时需要从多个相关的表中删除行。这里有几种方法可以做到这一点。
DELETE FROM table1
WHERE key IN (
SELECT key
FROM table1
INNER JOIN table2
ON table1.key = table2.key
WHERE table2.value = 'delete'
);
这个查询首先使用内部联接将 table1
和 table2
相关联,并找到那些在 table2
中具有 value = 'delete'
的行。然后,这个查询将找到的行的键值取出,再将它们用于从 table1
中删除行。
DELETE table1, table2
FROM table1
INNER JOIN table2
ON table1.key = table2.key
WHERE table2.value = 'delete';
这个删除操作使用了多表联接来删除两个表中的行。与方法1类似,这个查询首先将 table1
和 table2
相关联,找到那些在 table2
中具有 value = 'delete'
的行,然后从两个表中都删除这些行。
使用触发器可以让我们在一个表发生变化时,同时对其他相关表产生影响。下面是一个例子,演示如何在 table1
中删除一行时,同时删除一些相关的行:
CREATE TRIGGER `table1_delete` BEFORE DELETE ON `table1`
FOR EACH ROW BEGIN
DELETE FROM table2 WHERE table2.key = OLD.key;
DELETE FROM table3 WHERE table3.other_key = OLD.key;
END;
这个触发器在每次从 table1
中删除行时被触发。它将删除 table2
中所有与被删除行相关联的行以及 table3
中所有与被删除行相关联的行。
以上是从多个表中删除行的三种方法。你可以根据自己项目的需要选择其中一种或多种方法来使用。