MySQL無法創建外鍵錯誤 Err 1215: Cannot add the foreign key constraint

今天在寫數據庫作業時,遇到的無法創建外鍵問題

create table department
	(dept_name		varchar(20), 
	 building		varchar(15), 
	 budget		        numeric(12,2) check (budget > 0),
	 primary key (dept_name)
	);
	
create table course
	(course_id		varchar(8), 
	 title			varchar(50), 
	 dept_name		varchar(20),
	 credits		numeric(2,0) check (credits > 0),
	 primary key (course_id),
	 foreign key (dept_name) references department
		on delete set null
	);

需要了解幾點,什麼是主鍵外鍵?自己查;約束?表的主鍵和其他表的外鍵關聯時,要求數據類型和屬性都相同

嗯,我確認了一遍,類型和屬性都相同。最後發現是 reference 後面只有父表的名,卻沒有對應列的信息references department。改成references department(dept_name) 就好了(建表SQL文件是從SQLserver拿過來的,語法不同吧)。

常見幾種無法創建外鍵的可能

  • 父表不存在
    • 先創建父表,再創建子表;
    • SET FOREIGN_KEY_CHECKS=0; 後,創建子表,再創建父表;SET FOREIGN_KEY_CHECKS=1;
  • 標點符號使用不對
  • 對應列名拼錯
  • 對應列的數據類型和屬性不一致
  • 父表和子表 表(或列)的字符集 或 排序集 不同
  • 父表中相關列上沒有任何索引
  • 父表相關列有索引,但索引是一個多列索引,同時該列不是該做索引最左列
  • 父表不是innodb
  • 父表是分區表
  • MySQL5.7以上,父表中相應列是虛擬列,不是實際存儲列
  • reference 後面沒有列信息
  • 對約束操作使用 SET DEFAULT

你可以創建失敗時,使用 SHOW ENGINE INNODB STATUS\G ,顯示更多具體的錯誤信息,而非僅僅Err 1215.

詳細疑問解釋和解決方法可參考:Dealing with MySQL Error Code 1215: “Cannot add foreign key constraint”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章