日期:2014-05-16  浏览次数:20831 次

mysql建立外键发生错误,求救
CREATE TABLE `szs_jihuadan_items_price` (
  `szs_shengchanhao` varchar(255) NOT NULL,
  `szs_guige` varchar(255) NOT NULL,
  `szs_ptuhao` varchar(255) NOT NULL,
  `szs_price` float NOT NULL,
  `szs_beizhu` text NOT NULL,
  PRIMARY KEY (`szs_shengchanhao`,`szs_guige`,`szs_ptuhao`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `szs_pl_stock` (
  `id` int(8) unsigned zerofill NOT NULL auto_increment,
  `sch` varchar(255) NOT NULL COMMENT '生产号',
  `gg` varchar(255) NOT NULL COMMENT '规格',
  `th` varchar(255) NOT NULL COMMENT '图号',
  `subNm` varchar(255) NOT NULL COMMENT '子部件',
  `gid` varchar(4) NOT NULL COMMENT '工步号',
  `sl` decimal(12,2) default NULL COMMENT '库存量',
  `bz` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `NewIndex1` (`sch`,`gg`,`th`,`subNm`,`gid`)
 ) ENGINE=InnoDB AUTO_INCREMENT=14867 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC

szs_pl_stock要建立外键,sch,gg,th关联到szs_jihuadsan_items_price的szs_shengchanhao,szs_guige,szs_ptuhao,
当szs_pl_stock没有数据的时候可以建立,有数据的时候建立的时候发生以下错误:
alter table `szs_jihuadan`.`szs_pl_stock` add constraint `FK_szs_pl_stock` FOREIGN KEY (`sch`,`gg`,`th`) REFERENCES `szs_jihuadan_items_price` (`szs_shengchanhao`,`szs_guige`,`szs_ptuhao`) ON DELETE RESTRICT ON UPDATE CASCADE 

Cannot add or update a child row: a foreign key constraint fails (`szs_jihuadan/#sql-6b0_16b`, CONSTRAINT `FK_szs_pl_stock` FOREIGN KEY (`sch`, `gg`, `th`) REFERENCES `szs_jihuadan_items_price` (`szs_shengchanhao`, `szs_guige`, `szs_ptuhao`) ON UPDATE CASCAD)

为什么?


------解决方案--------------------
先 set foreign_key_checks=0
然后再alter table创建外键