簡體   English   中英

無法刪除 MySQL 中的外鍵

[英]Can't Drop foreign key in MySQL

我在課程和講師之間建立了一對多的關系,我想放棄這種關系。 當我試圖在課程表中刪除instructorID時,它告訴我。 我無法刪除它,因為它是一個外鍵。 然后我決定像這樣放棄它:

ALTER TABLE course DROP FOREIGN KEY instructorID

但我收到此錯誤:

#1091 - Can't DROP 'InstructorID'; check that column/key exists 

我不明白這個錯誤是什么意思。 我究竟做錯了什么?

請運行SHOW CREATE TABLE course; 確保instructorID 是外鍵約束的名稱。

補充:錯誤表示MySQL搜索了一個名為“InstructorID”的外鍵約束,但是沒有這個名字的約束,也許這是你的列名,但是你必須使用約束名來刪除外鍵。

運行SHOW CREATE table course; 你應該找到 fk 符號,它通常類似於下面的那個:

(course_ibfk_1) 

它可能會根據您使用的 mysql 版本而有所不同,然后使用 fk 符號刪除外鍵,如下所示:

alter table course drop foreign key course_ibfk_1;

您需要刪除“外鍵約束”和“鍵”。

Alter Table <table name> drop foreign key <constraint_name> 
Alter table <table name> drop key <column name>

如果你們中的任何人仍然無法DROP表。 嘗試這個。 您可以通過運行此查看所有詳細信息

SELECT
    TABLE_NAME,
    COLUMN_NAME,
    CONSTRAINT_NAME,
    REFERENCED_TABLE_NAME,
    REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'ReferenceTableName'; <-- change only this

如果您只想查看約束

SELECT
    CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'ReferenceTableName';

要刪除 FOREIGN KEY 約束:

MySQL:

ALTER TABLE Orders DROP FOREIGN KEY {Constraint/Key_name};

對於 SQL Server / Oracle / MS Access:

ALTER TABLE Orders DROP CONSTRAINT {Constraint/Key_name};

不能刪除 InstructorID 的原因是因為需要使用外鍵的約束名稱。 KevDev 指定您必須運行“SHOW CREATE TABLE course”才能找到約束名稱。 這樣做后,您可以刪除外鍵。 但是請稍等,“密鑰”仍然保留在后面,必須將其刪除。 您可以運行“SHOW CREATE TABLE”課程來檢查密鑰是否還在后面。 一旦檢查它仍然存在,然后執行鮑比建議的操作。 'Alter table drop key' 這樣做你已經完全刪除了外鍵

不能刪除“字符串”; 檢查列/鍵是否存在:ALTER TABLE accreditor_architectures DROP string error show in terminal when from database in ruby​​ on rails

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM