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;

このテーブルには複合キーがあります。

同じ日付/時刻で machine_no の値が異なる 2 つのレコードを挿入しようとすると、. 日付の重複エントリと表示されます。その理由がわかりません。複合キーであるため、両方の属性で重複するエントリのみを検索する必要があります。

4

1 に答える 1

1

あなたのPRIMARY KEY作品はうまくいきます:

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

問題の原因はUNIQUE KEYあなたが持っていることです:

UNIQUE KEY `date` (`date`),

これにより、同じ日時の2つの行を挿入することはできません。

同様に、他の3つの固有のキーも、おそらく同様に問題を引き起こします。

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

したがって、これらのキーを単純にします(一意ではありません)。

startまた、名前のみが異なる2つの同一のキー(およびstart_2)を使用する理由はありません。

于 2012-07-07T08:19:44.363 に答える