从不同的表中删除几个相关的行

时间:2013-03-24 12:10:30

标签: php mysql sql sql-delete

我有像这样的数据库

table 1 : area
+------------+
| id | name  |
+------------+
| 1  | area1 |
+------------+

table 2 : area_members
+------------------------+
| rel_area  | rel_school |
+------------------------+

table 3 : school
+------------+
| id  | name |
+------------+

table 4 : school_members
+---------------------------+
| rel_school  | rel_student |
+---------------------------+

table 5 : student
+------------+
| id  | name |
+------------+

在此表中,任何地区都有几所学校,任何学校都有几名学生。 我想删除与' area1'相关的任何内容。 (区域,学校,学生)来自所有这5个表格,删去area1。

我尝试了一些JOIN和UNION查询,但我无法修复它。 可以帮到我吗? :)

2 个答案:

答案 0 :(得分:2)

您可以简单地加入表格,最好的部分是,MySQL允许您只在一个查询中删除多个表。

DELETE  a, b, c, d, e
FROM    area a
        INNER JOIN are_members b
            ON a.ID = b.rel_area
        INNER JOIN school c
            ON b.rel_school = c.ID
        INNER JOIN school_members d
            ON c.ID = d.rel_school
        INNER JOIN student e
            ON d.rel_student = e.ID
WHERE   a.Name = 'area1'

PS:请在执行上述声明之前备份您的数据库

答案 1 :(得分:0)

定义外键约束时,可以指定删除的记录是否影响与外键相关的其他记录 在声明外键时可以指定一个选项: on delete cascade 。 假设表 B 属于表 A 。如果您在删除级联上指定:如果这些记录与表 A 中的记录相关,则会导致表 B 中的记录被删除表 A 中的记录已删除