2016-12-16 200 views
0

場景:爲什麼我不能刪除外鍵?

Parent table | id primary key, message_p 
Child table | id primary key, parent_id foreign key, message_c 

我在父表中數據的第1行和2行子表中的數據。我想測試FK關係執行的約束條件。然後我試圖從子表中刪除外鍵,以便evene雖然子表中有2行,然後我可以繼續和刪除父行:

alter table child 
drop foreign key parent_id 

然後我得到了以下錯誤:

[1091 - Can't DROP 'parent_id'; check that column/key exists]

注:

show create table child 

CREATE TABLE `track` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`member_id` int(11) NOT NULL, 
`title` varchar(50) DEFAULT NULL, 
`artist` varchar(50) DEFAULT 'TBA', 
`album` varchar(50) DEFAULT 'TBA', 
`genre` varchar(50) DEFAULT 'TBA', 
`dance_style` varchar(50) DEFAULT 'TBA', 
PRIMARY KEY (`id`), 
KEY `member_id` (`member_id`), 
CONSTRAINT `track_ibfk_1` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

我失去了我的查詢或約FK的一般理解的東西嗎?

+0

貌似你試圖通過列名來刪除一個外鍵,而不是由外鍵的名稱。 –

+0

另外你的'show create table child'向我們展示'track'表,確定你粘貼了正確的代碼? –

+0

但請注意,在該表上,約束名稱是'track_ibfk_1'。你的'child'表應該會發生同樣的情況,所以你試圖按列名刪除外鍵,而不是外鍵名。 –

回答

0

您試圖通過列名稱刪除外鍵約束,這就是爲什麼您的代碼不起作用。

首先查詢您的外鍵約束的名稱(用show create table child像你一樣顯示鍵名,像track_ibfk_1

0

如果你嘗試了一切,評論(假設正確的表名,約束名,...),我看不出有什麼理由不應該工作。

如果你有,但是,持外鍵父(或「成員」)其他表,也許這些約束堵父項的?

不管怎麼說,這裏是一個示例,顯示刪除外鍵實體LLY工作:

drop table if exists testchild; 
drop table if exists test; 

create table test(
id int primary key, 
name varchar(50) 
); 

create table testchild(
childid int primary key, 
reftotest int, 
constraint reftotest_FK foreign key (reftotest) references test(id) 
); 

insert into test values (1, 'Jack'), (2, 'Sam'); 
insert into testchild values (1, 1), (2, 2), (3, 1); 

insert into testchild values (4,5); # will fail 
delete from test where id = 1; # will fail 

alter table testchild drop foreign key reftotest_FK; 
insert into testchild values (4,5); # will not fail any more 
delete from test where id = 1; # will not fail any more