2016-08-05 163 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'; 
相關問題