MySQL-删除相关表行

MySQL-删除相关表行,mysql,sql,Mysql,Sql,假设我有以下内容(示例结构和数据): 在上面的示例中,当删除列表_类别表中的一行时,它还需要删除表列表_标记中的相关条目 现在我知道我可以组合表'category'和表'category_tag',但我更喜欢将它们分开,因为category_tag表包含额外的字段和数据 另一个选项是将cat_id列添加到表listing_tag——但我希望尽可能避免重复数据 是否可以使用上表配置创建“级联删除”外键约束?如果没有,我应该如何更改表以使其工作?在列表\u类别表上使用on delete触发器如何?

假设我有以下内容(示例结构和数据):

在上面的示例中,当删除
列表_类别
表中的一行时,它还需要删除表
列表_标记
中的相关条目

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

另一个选项是将
cat_id
列添加到表
listing_tag
——但我希望尽可能避免重复数据


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

列表\u类别
表上使用on delete触发器如何?
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 |
+---+
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 |
+---+