這是一個很長的問題,請仔細閱讀。我列出了我提到的一些鏈接,但是我已經閱讀了發佈此問題時引發的所有建議。這不是一個重複的問題,這裏標記爲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是數據庫的名稱。
我請教下面的討論:
- Error 1005 in MySQL
- Error 1005 in MySQL (from foreign key syntax?)
- Foreign Key in MySQL : ERROR 1005
- Foreign key issue in mysql (error 1005)
- Special Characters in MySQL Table Name
- MySQL參考https://dev.mysql.com/doc/refman/5.7/en/alter-table.html
的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
感謝您的幫助。
這工作,謝謝!你能解釋一下嗎? –
ALTER TABLE table_name DROP FOREIGN KEY constraint_name是用於刪除外鍵的語句。在這種情況下,您必須指定一個約束名稱。如果你忽略它,MySQL會爲你生成一個約束名稱。 –
謝謝你!這很有見地。再次感謝。 –