我有一个employee
表,其中包含以下列:
fname (varchar), lname (varchar), id (numeric)
id
是主键。
有一个名为works_on
且具有列
projectname (varchar), id (numeric)
在这里,id
是引用employee
表的外键。
当我尝试像这样从employee
表中删除一行时:
delete from employee where id = 1
我收到此错误:
对表“ employee”的更新或删除违反了表“ works_on”上的外键约束“ works_on_id_fkey”。
我是数据库管理系统的新手。
有解决方案吗?
答案 0 :(得分:1)
由于雇员是表works_on
中的外键;您之所以无法删除员工ID 1,是因为员工ID 1存在于works_on
(或其他可能是员工为外键的表中)上。系统正在尝试通过阻止您删除与works_on
关联的员工来维护数据库的完整性。
说,系统使您可以删除员工记录。现在,当您查看works_on
表时,员工1与什么相关?您将无法再查找其他信息中的名字/姓氏。因此系统在说:如果要删除员工记录,则必须首先删除/更改外键与其他系统记录的关联;确保其持续的完整性。如果系统允许您执行此操作,则将其称为“孤立”记录。与孩子关联的父记录不再存在。
要解决的几个选项是:
ON DELETE CASCADE ON UPDATE CASCADE,
,如果删除父记录,它将自动删除子记录。 (在启用之前,请务必谨慎并考虑这如何影响您的系统)Example: Docs 答案 1 :(得分:-2)
您不能通过这种方式删除行。因为它具有约束ID(works_on_id_fkey)。如果要删除,则必须从中删除约束。
alter table employee drop foreign key works_on_id_fkey