關於mysql外鍵創建失敗的問題

關於mysql外鍵創建失敗的問題

 

創建persons:

CREATE TABLE `persons` (

  `id_p` int(11) NOT NULL AUTO_INCREMENT,

  `lastname` varchar(10) DEFAULT NULL,

  `firstname` varchar(10) DEFAULT NULL,

  `address` varchar(50) DEFAULT NULL,

  `city` varchar(10) DEFAULT NULL,

  PRIMARY KEY (`id_p`)

);  www.aiwalls.com  

 

再創建表orders:

CREATE TABLE `orders` (

  `id_o` int(11) NOT NULL AUTO_INCREMENT,

  `orderno` int(11) NOT NULL,

  `id_p` int(11) NOT NULL,

  PRIMARY KEY (`id_o`),

  FOREIGN KEY (`id_p`) REFERENCES `persons` (`id_p`)

);

 

用show create table orders語句,查詢orders的信息發現,外鍵並沒有創建成功。查瞭一些資料,終於找到瞭原因。mysql默認創建的表是MyISAM類型的,需要將表的類型指定為innodb:

  www.aiwalls.com  

CREATE TABLE `orders` (

  `id_o` int(11) NOT NULL AUTO_INCREMENT,

  `orderno` int(11) NOT NULL,

  `id_p` int(11) NOT NULL,

  PRIMARY KEY (`id_o`),

  FOREIGN KEY (`id_p`) REFERENCES `persons` (`id_p`)

) ENGINE=InnoDB;

 

不過這時提示以下錯誤:

ERROR 1005 (HY000): Can't create table 'test.orders' (errno: 150)

將persons表的類型也指定為innodb就OK瞭。

 

總結一下外鍵創建失敗的幾種情況:

1.外鍵和被引用外鍵類型不一樣,比如integer和double

2.找不到要被引用的列

3.表的字符編碼不一樣 

4.數據引擎類型不一致,比如innodb和myisam

 

 

作者 gavinr

發佈留言