3 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您的表使用InnoDB引擎,通常會(huì)出現(xiàn)此錯(cuò)誤。在這種情況下,您將必須刪除外鍵,然后執(zhí)行alter table并刪除列。
但是棘手的部分是您不能使用列名刪除外鍵,而必須找到用于為其索引的名稱。為此,請(qǐng)發(fā)出以下選擇:
SHOW CREATE TABLE區(qū)域;
這應(yīng)該顯示索引的名稱,如下所示:
約束外region_ibfk_1鍵(country_id)參考 country(id)關(guān)于刪除無作用更新無作用
現(xiàn)在只需發(fā)出:
修改表區(qū)域丟棄外鍵 region_ibfk_1;
最后是:
更改表區(qū)域放置列country_id;
而且你很好走!

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
這確實(shí)是一個(gè)外鍵錯(cuò)誤,您可以使用perror找出:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
要查找有關(guān)失敗原因的更多詳細(xì)信息,可以使用SHOW ENGINE INNODB STATUS并查找“最新外來錯(cuò)誤”部分,其中包含有關(guān)錯(cuò)誤原因的詳細(xì)信息。
在您的情況下,很可能是因?yàn)槟承﹥?nèi)容引用了country_id列。

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
您還可能由于嘗試刪除不存在的外鍵而收到此錯(cuò)誤。因此,在刪除外鍵時(shí),請(qǐng)始終確保它們確實(shí)存在。
如果外鍵確實(shí)存在,并且仍然出現(xiàn)此錯(cuò)誤,請(qǐng)嘗試以下操作:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
//將外鍵放在這里!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
這總是對(duì)我有用:)
添加回答
舉報(bào)