2013-07-26 52 views
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`) 

任何幫助將是很好。謝謝。

+0

文檔說:'在涉及InnoDB表的外鍵錯誤的情況下(一般在MySQL服務器錯誤150),就可以得到一個通過檢查SHOW ENGINE INNODB STATUS的輸出來詳細解釋最新的InnoDB外鍵錯誤。 ' – 2013-07-26 06:43:48

+0

也許這不是必需條件,但將源表中的外鍵屬性設置爲主鍵是個好習慣 – Uriil

+0

'SHOW ENGINE INNODB STATUS'的結果: 表indent /#sql-88c_d9的外鍵約束出錯: 外鍵('project_id')引用項目('project_id'): 無法在引用表中找到索引,其中 引用的列顯示爲第一列,或表中的列類型 與引用的表不匹配爲了約束。 請注意,在使用> = InnoDB-4.1.12創建的表中,ENUM和SET的內部存儲類型已更改,舊錶 中的這些列不能被新表中的這些列引用。 @bmused – aki2all

回答

1

在被引用的表中,必須有一個索引,其中被引用的列按照相同順序列爲第一列。

參見:http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

所以嘗試:

CREATE TABLE `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`),                                                                                 
      KEY `project_id` (`project_id`)                                                                              
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 


CREATE TABLE `project_map` (                                              
       `id` int(11) NOT NULL,                                                
       `project_id` varchar(60) NOT NULL,                                             
       `head` int(11) NOT NULL,                                               
       PRIMARY KEY (`id`),                                                
       KEY `project_id` (`project_id`)                                             
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

ALTER TABLE `project_map` ADD CONSTRAINT 
`p_map_fk001` FOREIGN KEY (`project_id`) 
REFERENCES project(`project_id`); 
相關問題