2014-07-16 211 views
1

我有父表中有外国三个外键,但我想单独删除父表中的行,如何实现它? 是我使用的查询是目前如何从父表中删除一行而不从Child表中删除一行?

DELETE FROM TableName WHERE ColumnName= '89416' 

查询显示错误:Cannot delete or update a parent row: a foreign key constraint fails

+1

不要这样做!您可以暂时放弃外键并从父行中删除,但这会创建孤立记录,这是一件坏事。 –

+1

那么,这就是为什么它被称为参考完整性,它用于防止这种愚蠢的事情:-) – dnoeth

+0

我想你可以SET foreign_key_checks = 0; – wrecklez

回答

1

你应该返工您的要求,我们维持父子关系表的关系,因为我们需要连接的数据。

但无论如何,如果你想删除,那么一个选项是有(禁用约束,然后启用后删除)。但同样会出现问题。

-1

变化通过如下图所示的样品中创建它的子表:

CREATE TABLE Worker (
WorkerID smallint auto_increment, 
WorkerType varchar(45) NOT NULL, 
WorkerName varchar(45) NOT NULL, 
Position varchar(45) NOT NULL, 
TaxFileNumber int NOT NULL, 
Address varchar(100) , 
Phone  varchar(20) , 
SupervisorID smallint , 
PRIMARY KEY (WorkerID), 
FOREIGN KEY (SupervisorID) REFERENCES Worker(WorkerID) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE 
); 

你只需要添加ON DELETE SET NULLNO ACTION。在使用前,请看this answer上的一个类似的问题,它解释了不同的行为。