我尝试运行以下查询:
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 :(得分: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';