一个简单的级联参照完整性应该做到这一点 - 使用 ON DELETE CASCADE 声明您的 FOREIGN KEY。而且,如果您对parent_id
.
例如:
CREATE TABLE your_table (
id int PRIMARY KEY,
parent_id int DEFAULT NULL,
category_name varchar(45) NOT NULL,
-- Will also create index on parent_id:
CONSTRAINT your_table_fk1 FOREIGN KEY (parent_id) REFERENCES your_table (id)
ON DELETE CASCADE
);
INSERT INTO your_table (id, category_name) VALUES (1, 'Food');
INSERT INTO your_table (id, category_name) VALUES (2, 'Shelter');
INSERT INTO your_table (id, parent_id, category_name) VALUES (3, 1, 'Vegetables');
INSERT INTO your_table (id, parent_id, category_name) VALUES (4, 3, 'Carrots');
INSERT INTO your_table (id, parent_id, category_name) VALUES (5, 3, 'Beans');
INSERT INTO your_table (id, parent_id, category_name) VALUES (7, 2, 'Mansions');
INSERT INTO your_table (id, parent_id, category_name) VALUES (8, 2, 'Cabins');
那么当你执行...
DELETE FROM your_table WHERE category_name = 'Vegetables'
...不仅“蔬菜”,“胡萝卜”和“豆类”也将被删除。
这甚至可以递归地工作,所以......
DELETE FROM your_table WHERE category_name = 'Food'
...在第一级删除“食物”,在第二级删除“蔬菜”,在第三级删除“胡萝卜”和“豆类”。