mysql - 在应用 ON DELETE 约束时如何删除子表中的条目

标签 mysql

我想在现有表上应用 ON DELETE 约束。为此,我正在使用此查询:

mysql> alter table table_product_varients add constraint fk_test foreign key (product_id) references table_products (product_id) on delete cascade ;

出现这个错误:

错误 1452 (23000):无法添加或更新子行:外键约束 f 病痛。

我理解此错误是因为我在 table_products 中没有 product_id,但 table_product_varients 具有这些 product_id 的变体。

我可以通过设置应用 ON DELETE 约束

SET FOREIGN_KEY_CHECKS=0 

这将应用 ON DELETE 约束,但变量不会在子表中被删除,父表(table_products)中没有 product_id

如何应用 ON DELETE 约束并删除子表中没有父表的变量?

最佳答案

您必须清理表 table_product_varients 中的无效引用,然后才能添加约束

DELETE FROM table_product_varients
WHERE product_id NOT IN (SELECT product_id FROM table_products);

关于mysql - 在应用 ON DELETE 约束时如何删除子表中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633138/

相关文章:

mysql - 在 SQL 中将一个表的一列替换为另一个表的另一列

php - 每次查询后关闭 MySQL 连接

php - 在相同的符号中删除和创建相同的触发器

php - 使用 tiny mce 作为富文本编辑器。尝试将代码示例添加为博客文章时出错。网站使用php-mysql

javascript - 无法在模态中携带正确的行值

mysql - 根据日期选择行

MySQL : Top K with duplicates

mysql - SQL 查询中日期范围的 DATEDIFF() 或 BETWEEN

mysql - SQL 查询,对两个子字符串进行排序

mysql - 迁移到 MySQL 且指定的架构无效