1
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;

该表有一个复合键。

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

4

1 回答 1

1

你的PRIMARY KEY作品很好:

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

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

UNIQUE KEY `date` (`date`),

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

同样,您的其他 3 个唯一键也可能会导致您的 torubles:

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

所以,让这些键简单(不是唯一的)。

并且没有理由拥有两个仅名称不同的相同键(startstart_2

于 2012-07-07T08:19:44.363 回答