删除具有外键关系表的表中的记录

时间:2009-05-14 05:57:39

标签: database

大家好我是数据库新手

我的问题是如何删除具有外键关系的表中的记录 假设我有一个2桌雇员&以deptID为关系的部门 现在我想删除表中的特定行,如“从depID = 10的部门删除”,如果部门中的员工被删除,我也想要保持外键关系。可以有人PLZ为我提供这样做的查询

由于

5 个答案:

答案 0 :(得分:2)

您应指定删除级联到employee表。取决于您的数据库如何执行此操作,但几乎每个数据库都支持级联删除。

例如在SQL Server中:

CREATE TABLE Employee
(
    DepId INT NOT NULL REFERENCES Department(DepId) ON DELETE CASCADE
)

答案 1 :(得分:1)

这取决于数据库以及您如何定义关系。您可能导致删除级联,这意味着删除父级删除子记录,或“删除nullify”,这会导致子关系在其FK字段中具有NULL,或者您拥有什么。这取决于您的需求。通常情况下,我没有定义NULLIFY或CASCADE并根据需要删除每条记录,而不会自动处理。

答案 2 :(得分:0)

在SQL Server中,您将关系标记为CASCASE DELETE

或者,首先对Employees表执行DELETE,然后对Departments表执行第二次DELETE。

答案 3 :(得分:0)

建立外键关系时,您可以定义(在MS SQL Server中,无论如何)对更新和删除采取的操作。例如,您可以说“删除部门中的记录时,将删除级联到任何引用它的子表”。您可以找到更多信息here

答案 4 :(得分:0)

DB2语法(因为您尚未指定使用哪个DB):

Create table Employee
...
... 
FOREIGN KEY (deptID) REFERENCES department (deptID)
    ON DELETE CASCADE

如果指定CASCADE选项,则在删除部门时将删除员工。

如果不是CASCADE,而是指定RESTRICT,它将不允许您删除dept,除非首先删除属于该部门的所有员工。

或者,如果您不希望每次都发生这种情况,那么最好指定RESTRICT并在emp的任何地方首先执行删除

Delete * from Employee where deptID = 10;
Delete * from Dept where deptID = 10;

以下是examples

的链接