0

假设我有以下(样本结构和数据):

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

需要发生的是,在上面的示例中,当删除 table 中的一行时listing_category,它还需要删除 table 中的相关条目listing_tag

现在我知道我可以将表 'category' 和表 'category_tag' 组合起来,但我更喜欢将它们分开,因为category_tag表包含额外的字段和数据。

另一种选择是向cat_id表中添加一列listing_tag- 但我想尽可能避免重复数据。

是否可以使用上表配置创建“级联删除”外键约束?如果没有,我应该如何更改表格以使其正常工作?

4

1 回答 1

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 |
+---+
于 2013-10-24T16:13:54.013 回答