mysql无法创建外键

时间:2011-10-05 14:41:02

标签: mysql

这是我的两张桌子

CREATE TABLE IF NOT EXISTS `carslibrary` (   
  `CarID` int(10) unsigned NOT NULL AUTO_INCREMENT,   
  `CarName` varchar(255) NOT NULL,  
  `colorslibrary_ID` int(11) unsigned NOT NULL,   
  PRIMARY KEY (`CarID`),
  KEY `colorslibrary_ID` (`colorslibrary_ID`) 
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

CREATE TABLE IF NOT EXISTS `colorslibrary` (   
  `ColorID` int(11) unsigned NOT NULL AUTO_INCREMENT,   
  `ColorName` varchar(255) NOT NULL,
  PRIMARY KEY (`ColorID`) 
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

我在以下查询中收到错误:

ALTER TABLE  `carslibrary` ADD FOREIGN KEY (  `colorslibrary_ID` )
REFERENCES  `cars2`.`colorslibrary` (`ColorID` );

MySQL说:

  

#1452 - 无法添加或更新子行:外键约束   失败(`cars2`。<结果2解释文件名时   '#sql-cf8_41a'>,CONSTRAINT`#sql-cf8_41a_ibfk_1` FOREIGN KEY   (`colorslibrary_ID`)REFERENCES`colorslibrary`(`ColorID`))

2 个答案:

答案 0 :(得分:5)

您的表格不为空,因此在创建约束时会失败(引用未找到)。

使用SET FOREIGN_KEY_CHECKS = 0;并重新运行alter table

答案 1 :(得分:2)

我首先会在carslibrary表中找出孤立的行:

select * from carslibrary where colorslibrary_ID not in (select ColorID from cars2.colorslibrary);

然后决定你要对这些孤立的行做什么。想从carslibrary表中DELETE他们? UPDATE他们到colorslibrary中的现有父ColorID? INSERT在colorslibrary表中使用一个新的ColorID来满足孤立的行?

在整理完数据后,您应该能够毫无错误地运行ALTER TABLE