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=utf8CREATE 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=DYNAMICszs_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)为什么?

解决方案 »

  1.   

    先 set foreign_key_checks=0
    然后再alter table创建外键
      

  2.   

    表中已有的数据是否符合要求? 你表中的数据中的sch,gg,th是否在szs_jihuadan_items_price表中存在对应记录?
      

  3.   

    数据在szs_jihuadan_items_price都存在的,1#解决问题了
      

  4.   

    但是不明白set foreign_key_checks=0这个是什么意思?网上查了一下是取消外键约束,到底是什么意思?是建立的外键的名称可以出现相同的意思吗?