MySQL双向关系和镜像外键的问题

时间:2012-09-12 11:12:21

标签: mysql replication bidirectional

我必须创建两个具有双向关系的表,如下图所示。 enter image description here 但它总是会出错。我使用以下查询来创建表。

CREATE TABLE IF NOT EXISTS `rpt_operation` (
  `op_id` int(45) NOT NULL,
  `component` int(45) NOT NULL,
  `ideal_time` time NOT NULL,
  `handling_time` time NOT NULL,
  PRIMARY KEY (`op_id`),

  INDEX (component),
  FOREIGN KEY (component)
  REFERENCES rpt_component(comp_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



CREATE TABLE IF NOT EXISTS `rpt_component` (
  `comp_id` int(45) NOT NULL,
  `lot_code` int(60) NOT NULL,
  `lot_color` varchar(60) NOT NULL,
  `drawing_num` int(60) NOT NULL,
  `revision_num` int(60) NOT NULL,
  `operation` int(45) NOT NULL,
  PRIMARY KEY (`comp_id`),

  INDEX (operation),
  FOREIGN KEY (operation)
  REFERENCES rpt_operation(op_id)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

错误出现在rpt_operation表的行component int(45) NOT NULL中。 任何帮助将不胜感激。 提前致谢

2 个答案:

答案 0 :(得分:4)

你的桌子结构是不可能的。您无法将任何记录插入rpt_operation,因为rpt_component外键中没有component的记录,您无法将任何记录插入rpt_component,因为那里rpt_operation外键中operation没有记录。

如果您将其中一个或两个字段设为可空,则表结构仍然是递归的,因此您必须手动添加其中一个外键,例如:

ALTER TABLE rpt_operation
  ADD CONSTRAINT
  FOREIGN KEY (component)
  REFERENCES rpt_component(comp_id);

答案 1 :(得分:0)

我建议您使用链接表来解决此问题。这不是一个可行的解决方案,需要解决方法。