这是我的两张桌子
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`))
答案 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
。