2016-08-05 170 views
1

我尝试运行以下查询:列在那里,但是当我尝试删除它说在MYSQL中没有列? **错误代码:1091不能DROP ... **

ALTER TABLE ORDER_DETAIL DROP foreign key USER_ID; 

它说:

Error Code: 1091. Can't DROP 'USER_ID'; check that column/key exists 

当我运行:

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID 

它说:

Error Code: 1553. Cannot drop index 'USER_ID': needed in a foreign key constraint 0.098 sec 

但是当我运行:

desc ORDER_DETAIL; 

我得到:

Field,Type,Null,Key,Default,Extra 
ORDER_ID,int(11),NO,PRI,NULL, 
USER_ID,int(11),NO,MUL,NULL, 
ORDER_DATE,date,YES,,NULL, 

有人能解释什么是错在这里,如何解决?

+0

您将'ORDER_ID'上的'外键'约束删除,但不删除列。 – Bobby

+0

@ e4c5当我尝试删除外键时,它会要求检查该列是否存在。当我尝试删除列本身时,它表示它是一个外键 –

+0

但是来自订单的用户标识未用作fk。来自用户的用户ID是我想要编辑的fk。为此,我必须从订单中删除此用户标识。 –

回答

1

从MySQL创建外键,以便直接尝试索引放弃外键不起作用。所以这里提供的答案不起作用。

为我工作的正确的SQL查询是这样的:

ALTER TABLE ORDER_DETAIL DROP FOREIGN KEY ORDER_DETAIL_ibfk_1; 

这里要注意的重要一点是_ibfk_1

,之后才是我可以使用删除列:

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID; 
2

您试图删除外键。为此,您需要提供的是外键的名称。要查找外键的名称,请执行SHOW CREATE TABLE。然后使用在ALTER TABLE

ALTER TABLE ORDER_DETAIL DROP foreign key key_name_from_show_create; 

如果它真的要删除

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID; 
+0

我仍然得到相同的错误 –

+0

检查我编辑的问题 –

+0

是的,你需要先删除外键,然后才能删除列。我想我在你的其他问题中提到过 – e4c5

0
Use in below steps 

1) drop foreign constraint 

ALTER TABLE ORDER_DETAIL 
DROP FOREIGN KEY fk_order_detail // name of your foreign key 

2) then run below command to drop column 

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID; 
+0

欢迎来到Stack Overflow!尽管这段代码可以解决这个问题,但[包括一个解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要使用解释性注释来挤占代码,因为这会降低代码和解释的可读性! – FrankerZ

0

如果你想删除外键约束,则使用约束名称的列:

alter table ORDER_DETAIL drop constraint USER_ID_CONSTRAINT 

此处USER_ID_CONSTRAINT是约束名称。

如果你想删除列然后使用此:

alter table ORDER_DETAIL drop column USER_ID 

为了让您可以使用所有这一切约束名称:

select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME 
from information_schema.KEY_COLUMN_USAGE 
where TABLE_NAME = 'table to be checked'; 
相关问题