当前位置: 首页 > 面试题库 >

无法删除或修改或查看同一表的外键约束

夏令秋
2023-03-14
问题内容

无法访问数据库中的同一表外键约束。我无法删除它,禁用它,将其添加回,…如何删除它并重新添加它?

注意:我有多个数据库版本,都是使用相同的脚本创建的。我只有一个人看到这种行为。在其他情况下,可以轻松添加和删除此密钥。

非常感谢。这是我运行的一些脚本和结果:

在过去的某个时候,我运行了以下脚本:

ALTER TABLE Recipe
ADD CONSTRAINT FK_Recipe_DuplicateOfRecipeId_Recipe_Id FOREIGN KEY (DuplicateOfRecipeId)
    REFERENCES Recipe (Id) ;

现在正在运行

ALTER TABLE Recipe DROP CONSTRAINT  FK_Recipe_DuplicateOfRecipeId_Recipe_Id 
results in the following error:
'FK_Recipe_DuplicateOfRecipeId_Recipe_Id' is not a constraint.

并运行

ALTER TABLE Recipe NOCHECK CONSTRAINT FK_Recipe_DuplicateOfRecipeId_Recipe_Id
results in: Constraint 'FK_Recipe_DuplicateOfRecipeId_Recipe_Id' does not exist.

所以我跑

alter table Recipe ADD CONSTRAINT FK_Recipe_DuplicateOfRecipeId_Recipe_Id FOREIGN KEY (DuplicateOfRecipeId) REFERENCES Recipe (Id);

我得到:

The ALTER TABLE statement conflicted with the FOREIGN KEY SAME TABLE constraint "FK_Recipe_DuplicateOfRecipeId_Recipe_Id". The conflict occurred in database "CrawlerDB", table "dbo.Recipe", column 'Id'.

所以我跑:

select COUNT(*) from sys.objects where name = 'FK_Recipe_DuplicateOfRecipeId_Recipe_Id'
select COUNT(*) from sys.all_objects where name = 'FK_Recipe_DuplicateOfRecipeId_Recipe_Id'
SELECT COUNT(*) FROM sys.foreign_keys where name = 'FK_Recipe_DuplicateOfRecipeId_Recipe_Id'

所有三个都不返回。

怎么回事,我该如何解决?我需要访问该对象,将其删除并添加回去。
非常感谢!


问题答案:

我猜您的主数据库已损坏。重建它可能是最合适的选择。

但是,作为解决方法,您可以尝试以下操作:

  1. 将您的外键复制到非FK列中

ALTER TABLE Recipe ADD DuplicateOfFK INT

  1. 将所有FK数据复制到副本中

UPDATE Recipe SET DuplicateOfFK = DuplicateOfRecipeId

  1. 删除外键列

ALTER TABLE Recipe DROP COLUMN DuplicateOfRecipeId

  1. 倒退。

ALTER TABLE Recipe ADD DuplicateOfRecipeId INT

UPDATE Recipe SET DuplicateOfRecipeId = DuplicateOfFK

ALTER TABLE Recipe DROP COLUMN DuplicateOfFK

  1. 重新添加约束。


 类似资料:
  • 问题内容: 进行时: 错误: 这是我的桌子: 问题答案: 照原样,必须先删除Advertisers表中的行,然后才能删除它引用的Jobs表中的行。这个: …实际上与应有的相反。实际上,这意味着您必须在作业表中有一条记录,然后才是广告商。因此,您需要使用: 纠正外键关系后,您的delete语句将起作用。

  • 在MySQL中,我想删除一个表。 我尝试了很多方法,但我总是得到一个错误,即不能删除名为的表。这是我得到的错误: #1217-无法删除或更新父行:外键约束失败 我怎么放下这张桌子?

  • 我试图从MySQL中的多个表中删除记录,但我不断得到一个错误,错误内容为。 这是我正在尝试运行的SQL语句: 我试过在删除级联上执行

  • 我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题: 问题出在哪里? 我想做什么? 我正在尝试删除package实体,但不删除package表中引用的用户 我正在通过packageDAO对package实体调用delete

  • 我将按id删除对象,但出现如下错误: com。mysql。jdbc。例外情况。jdbc4。MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(,constraint外键()引用) 我按id删除的方法是: 我的表的映射看起来像: Selection.java 作业Audit.java 审核组。JAVA AssignmentAudit

  • 我在这里使用了多对一双向关系,一旦我被放入数据库,我就不能删除文件,如果我试图删除,我会遇到异常,无法删除或更新父行:外键约束失败。 这是我的另一个实体类... 嗨这是我的完整栈迹