編輯#2: - 以下斯賓塞7593的答案,即沒有外鍵創建表,然後使用alter table
語句添加它們後,該表已成功創建併成功添加了外鍵。爲什麼我得到「錯誤代碼1005不能創建c errno 150 mysql」?
但現在我想知道爲什麼? 爲什麼它在我們創建表格時起作用,然後使用alter table
聲明添加外鍵約束,而不是當我們在create table
聲明中完成所有操作時?
我在我的數據庫中創建了下列表格。前兩個是創建成功,但第三個是給這個錯誤。
我檢查了我的數據庫中的this answer中的點,我可以理解。請告訴我爲什麼我得到這個錯誤。
CREATE TABLE a (
a_id INT(255) NOT NULL AUTO_INCREMENT,
name VARCHAR(5000),
code VARCHAR(5000),
PRIMARY KEY (a_id)
);
CREATE TABLE b (
b_id INT(255) NOT NULL AUTO_INCREMENT,
b_name VARCHAR(5000),
PRIMARY KEY (b_id)
);
CREATE TABLE c (-- error code 1005 can t create c errno 150 mysql
a_id INT(255), -- fk
b_id INT(255), -- fk
PRIMARY KEY (a_id, b_id),
FOREIGN KEY (a_id)
REFERENCES a (a_id),
FOREIGN KEY (b_id)
REFERENCES b(b_id)
);
編輯: -
我執行的只是這三個報表中單獨(改變所有INT
類型的大小來11
後 - 這要歸功於邁克爾Berkowski評論),讓我吃驚,它確實創建表,但給了這個記錄(如果我使用正確的字):
3 4 01:03:49 CREATE TABLE a (
a_id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(5000),
code VARCHAR(5000),
PRIMARY KEY (a_id)
) 0 row(s) affected 0.156 sec
3 5 01:03:54 CREATE TABLE b (
b_id INT(11) NOT NULL AUTO_INCREMENT,
b_name VARCHAR(5000),
PRIMARY KEY (b_id)
) 0 row(s) affected 0.234 sec
3 6 01:03:58 CREATE TABLE c (-- error code 1005 can t create c errno 150 mysql
a_id INT(11), -- fk
b_id INT(11), -- fk
PRIMARY KEY (a_id, b_id),
FOREIGN KEY (a_id)
REFERENCES a (a_id),
FOREIGN KEY (b_id)
REFERENCES b(b_id)
) 0 row(s) affected 0.203 sec
這就是所有這三個表都已創建,但在創建第三個表時會返回一個錯誤。
EDIT#3: -
從SHOW輸出CREATE TABLE一個,和SHOW CREATE TABLE B: -
CREATE TABLE `a` (
`a_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(5000) DEFAULT NULL,
`code` varchar(5000) DEFAULT NULL,
PRIMARY KEY (`a_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `b` (
`b_id` int(11) NOT NULL AUTO_INCREMENT,
`b_name` varchar(5000) DEFAULT NULL,
PRIMARY KEY (`b_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
,請發表您使用的是精確的語句。這些看起來像縮寫,並且確實它們正確地工作:http://sqlfiddle.com/#!2/10d9b –
但是單獨地,'INT(255)'是可疑的。您希望這些列包含哪些數據? (請參閱http://stackoverflow.com/questions/7171312/what-is-the-max-number-if-i-store-int255-in-mysql) –
可能的重複[錯誤代碼:1005.無法創建表'...'(errno:150)](http://stackoverflow.com/questions/9018584/error-code-1005-cant-create-table-errno-150) – Mureinik