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 |
+---+