1
我已經創建了下列表格,並且不知道爲什麼我的外鍵約束腳本不工作。無法在MySQL錯誤中創建外鍵:150
CREATE TABLE IF NOT EXISTS `project` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`project_id` varchar(60) NOT NULL,
`project_name` varchar(500) NOT NULL,
`cons_bal` int(11) NOT NULL,
`non_cons_bal` int(11) NOT NULL,
`budget_head` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
這裏是我的另一個表:
CREATE TABLE IF NOT EXISTS `project_map` (
`id` int(11) NOT NULL,
`project_id` varchar(60) NOT NULL,
`head` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
這裏是我的附加約束線:
alter table project_map add constraint p_map_fk001 foreign key (`project_id`) references project(`project_id`)
任何幫助將是很好。謝謝。
文檔說:'在涉及InnoDB表的外鍵錯誤的情況下(一般在MySQL服務器錯誤150),就可以得到一個通過檢查SHOW ENGINE INNODB STATUS的輸出來詳細解釋最新的InnoDB外鍵錯誤。 ' – 2013-07-26 06:43:48
也許這不是必需條件,但將源表中的外鍵屬性設置爲主鍵是個好習慣 – Uriil
'SHOW ENGINE INNODB STATUS'的結果: 表indent /#sql-88c_d9的外鍵約束出錯: 外鍵('project_id')引用項目('project_id'): 無法在引用表中找到索引,其中 引用的列顯示爲第一列,或表中的列類型 與引用的表不匹配爲了約束。 請注意,在使用> = InnoDB-4.1.12創建的表中,ENUM和SET的內部存儲類型已更改,舊錶 中的這些列不能被新表中的這些列引用。 @bmused – aki2all