2015-07-12 102 views
-1

這是一個很長的問題,請仔細閱讀。我列出了我提到的一些鏈接,但是我已經閱讀了發佈此問題時引發的所有建議。這不是一個重複的問題,這裏標記爲https://stackoverflow.com/questions/31341481/unable-to-figure-out-the-cause-for-error-1005-in-mysql-database在執行ALTER TABLE時MySQL中的錯誤1005

我一直在試圖寫一個小的MySQL數據庫,其中包含定義爲兩個表的角色和用戶如下:

作用

CREATE TABLE `role` (
    `roleid` varchar(20) NOT NULL, 
    `role_name` varchar(255) NOT NULL, 
    `permission` int(11) NOT NULL, 
    PRIMARY KEY (`roleid`), 
    UNIQUE KEY `roleid` (`roleid`), 
    UNIQUE KEY `role_name` (`role_name`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

用戶

CREATE TABLE `user` (
    `uid` int(11) NOT NULL AUTO_INCREMENT, 
    `uname` varchar(255) NOT NULL, 
    `slug` varchar(255) NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `rid` varchar(20) NOT NULL, 
    UNIQUE KEY `uid` (`uid`), 
    UNIQUE KEY `uname` (`uname`), 
    UNIQUE KEY `slug` (`slug`), 
    UNIQUE KEY `email` (`email`), 
    UNIQUE KEY `password` (`password`), 
    KEY `rid` (`rid`), 
    CONSTRAINT `user_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `role` (`roleid`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

所以現在當我發出ALTER TABLE 'user' DROP FOREIGN KEY;

我收到一個錯誤:

ERROR 1005 (HY000): Can't create table 'parth.#sql-418_24' (errno: 150) 

parth是數據庫的名稱。

我請教下面的討論:

SHOW ENGINE INNODB STATUS了關於上述情況的輸出如下:

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
150710 18:20:35 Error in foreign key constraint of table parth/#sql-418_24: 
foreign key: 
Syntax error close to: 

請幫我想出解決辦法。謝謝。

當我執行ALTER TABLE命令時,會自動生成table parth /#sql-418_24。根據參考手冊,ALTER TABLE通過將原始表的內容複製到一個臨時表中進行工作,在這種情況下,該表是#sql-418_24,然後根據架構中的指定將其重命名爲表的名稱。所以它似乎不像表名中的特殊字符的問題。請幫忙。

MySQL版本5.5.43-0ubuntu0.14.04.1 操作系統Ubuntu的14.04

感謝您的幫助。

回答

0

試試這個...

ALTER TABLE `user` DROP FOREIGN KEY `user_ibfk_1`; 

你應該下降的約束,在此約束被命名爲user_ibfk_1

+0

這工作,謝謝!你能解釋一下嗎? –

+0

ALTER TABLE table_name DROP FOREIGN KEY constraint_name是用於刪除外鍵的語句。在這種情況下,您必須指定一個約束名稱。如果你忽略它,MySQL會爲你生成一個約束名稱。 –

+0

謝謝你!這很有見地。再次感謝。 –