gpt4 book ai didi

mysql - SQL:无法删除或更新父行:外键约束失败

转载 作者:行者123 更新时间:2023-11-29 01:13:10 25 4
gpt4 key购买 nike

每当我尝试像这样从表“survey”中删除调查时:

DELETE FROM surveys WHERE survey_id = 77

它提示我如下错误:

#1451 - Cannot delete or update a parent row: a foreign key constraint fails ('user_surveys_archive', CONSTRAINT 'user_surveys_archive_ibfk_6' FOREIGN KEY ('user_access_level_id') REFERENCES 'user_surveys' ('user_access_level_id') ON DELETE NO ACTION )

第一件事:我没有任何这样的名为“user_surveys_archive_ibfk_6”的表

第二件事:其他表中没有本次调查的记录。

关于如何删除此记录或解决此问题的任何想法?

编辑

这是我在导出表调查的表约束时找到的行

ALTER TABLE `surveys`
ADD CONSTRAINT `surveys_ibfk_1` FOREIGN KEY (`survey_type_id`) REFERENCES `survey_types` (`survey_type_id`) ON DELETE CASCADE ON UPDATE NO ACTION;`

最佳答案

您需要先删除或更新表 user_surveys_archive 中的一些行。

这些行与 user_surveys 表中的行相关。

可能在表 user_surveys 上定义了一个外键约束,它引用了您正在尝试的 surveys 中的行删除。

(您需要检查外键定义,最快的方法是

SHOW CREATE TABLE user_surveys 

并查找REFERENCES 调查。 (很可能,它是一个名为 survey_id 的列,但我们只是猜测,而没有查看外键约束的定义。)

要在 user_surveys_archive 中找到阻止 DELETE 发生的行...

SELECT a.*
FROM user_surveys_archvive a
JOIN user_surveys u
ON u.user_access_level_id = a.user_access_level_id
JOIN surveys s
ON s.survey_id = u.survey_id -- change this to whatever the FK is
WHERE s.survey_id = 77

很可能从 user_surveyssurveys 的外键约束是用 ON DELETE CASCADE 定义的。从 surveys 中删除行的尝试标识了 user_surveys 中应自动删除的行。

试图从 user_surveys 中自动删除行违反了 user_surveys_archive 中定义的外键约束。并且该外键ON DELETE CASCADE定义。

(另一种可能性是定义了一个正在执行某些 DML 操作的触发器,但这很奇怪。)


确定行后,您需要决定进行哪些更改以允许您从调查中删除行。

您可以删除行,也可以更新行。

要从 user_surveys_archive 中删除行,请修改上面的查询并将 SELECT 替换为 DELETE。如果 user_surveys_archive 中的 user_access_level_id 列允许 NULL 值,您可以进行更新。

SELECT a.* FROM 替换为 UPDATE,并添加 SET a .user_access_level_id = NULLWHERE 子句上方的一行...

UPDATE user_surveys_archvive a
JOIN user_surveys u
ON u.user_access_level_id = a.user_access_level_id
JOIN surveys s
ON s.survey_id = u.survey_id -- change this to whatever the FK is
SET a.user_access_level_id = NULL
WHERE s.survey_id = 77

(外键列的名称是 user_access_level_id 对我来说似乎很奇怪。但它只是一个列名,它可以命名为任何东西......对我来说似乎很奇怪,因为约定和我们在命名外键列时遵循的模式。)

关于mysql - SQL:无法删除或更新父行:外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com