列就在那里,但是当我尝试删除它时说MYSQL中没有列? **错误代码:1091。不能DROP ... **

时间:2016-08-05 09:30:04

标签: mysql sql mysql-workbench

我尝试运行以下查询:

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,

有人可以解释这里有什么问题以及如何解决它?

4 个答案:

答案 0 :(得分:2)

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

<ul>
<li>...</li>
<li class="menu-item[-1]">...</li>
<li class="menu-item[-2]">...</li>
<li class="menu-item[-3]">
    <ul>
        <li class="menu-item[-4]"></li>
        <li class="menu-item[-5]"></li>
    </ul>
</li>
<li class="menu-item[-6]">...</li>
</ul>

如果它真的是您要删除的列

ALTER TABLE ORDER_DETAIL DROP foreign key key_name_from_show_create;

答案 1 :(得分: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 :(得分: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; 

答案 3 :(得分: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';