假设我有以下内容(样本结构和数据):
Table category
======================
id (PK) name
-----------------
45 computers
50 sports
Table category_tag
======================
id (PK) name cat_id (FK)
---------------------------------
100 keyboard 45
120 football 50
Table listing_category
======================
list_id (PK) cat_id (PK/FK)
------------------------------
10001 45
10001 50
Table listing_tag
======================
list_id (PK) cat_tag_id (PK/FK)
----------------------------------
10001 100
10001 120
在上面的示例中,需要发生的是,当删除listing_category
表中的行时,还需要删除表listing_tag
中的相关条目。
现在我知道我可以将表'category'和表'category_tag'结合起来,但我更喜欢将它们分开,因为category_tag
表包含额外的字段和数据。
另一个选项是向表cat_id
添加listing_tag
列 - 但我希望尽可能避免重复数据。
是否可以使用上面的表配置创建“级联删除”外键约束?如果没有,我应该如何更改表格才能生效?
答案 0 :(得分:1)
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT * FROM my_a;
+----+--------+--------+
| id | value1 | value2 |
+----+--------+--------+
| 0 | 1.00 | 2.20 |
| 1 | 2.10 | 3.50 |
| 2 | 5.20 | 2.90 |
+----+--------+--------+
DELETE x
, y
FROM ints x
JOIN my_a y
ON y.id = x.i
WHERE y.value1 = 1.00
AND y.value2 = 2.2;
SELECT * FROM my_a;
+----+--------+--------+
| id | value1 | value2 |
+----+--------+--------+
| 1 | 2.10 | 3.50 |
| 2 | 5.20 | 2.90 |
+----+--------+--------+
SELECT * FROM ints;
+---+
| i |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+