插入复合主键表时插入“复制条目”

时间:2012-07-07 07:51:57

标签: mysql database primary-key

CREATE TABLE IF NOT EXISTS `mytable` (
  `machine_no` varchar(50) CHARACTER SET ascii NOT NULL,
  `date` datetime NOT NULL,
  `nature` int(11) DEFAULT NULL,
  `start` time NOT NULL,
  PRIMARY KEY (`machine_no`,`date`),
  UNIQUE KEY `date` (`date`),
  UNIQUE KEY `start` (`start`),
  UNIQUE KEY `start_2` (`start`),
  UNIQUE KEY `nature` (`nature`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

此表有一个复合键。

当我尝试插入具有相同日期/时间但不同值machine_no的2条记录时。它说日期重复输入。我不明白它的原因。因为它是一个复合键,它应该只在两个属性中查找重复的条目。

1 个答案:

答案 0 :(得分:1)

您的PRIMARY KEY工作正常:

PRIMARY KEY (`machine_no`,`date`),

导致问题的原因是您拥有的UNIQUE KEY

UNIQUE KEY `date` (`date`),

这不允许插入具有相同日期时间的两行。

同样,你的其他3个独特的钥匙也可能会让你受到影响:

UNIQUE KEY `start` (`start`),
UNIQUE KEY `start_2` (`start`),
UNIQUE KEY `nature` (`nature`)

因此,使这些键变得简单(不是唯一)。

并且没有理由让两个相同的键只在名称上有所不同(startstart_2