2

これは、バッチ テーブルを作成した後に自動生成されたコードです。このテーブルにデータを挿入している間

  1. BatchID=1,Course_CourseID=1
  2. BatchID=1,Course_CourseID=2

「キー 'BatchID_UNIQUE' のエントリ '1' が重複しています」というエラーが発生しています。C# 2010 Express Windows アプリケーションと MySQl 5.1 を使用しています。

私のテーブルスキーマはこちら

CREATE TABLE `batch` (
  `BatchID` int(11) NOT NULL,
  `Course_CourseID` int(11) NOT NULL,
  `NoOfStudents` int(11) DEFAULT NULL,
  `ClassRoom` varchar(45) DEFAULT NULL,
  `StartDate` varchar(45) DEFAULT NULL,
  `Day` varchar(45) DEFAULT NULL,
  `Time` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`BatchID`,`Course_CourseID`),
  UNIQUE KEY `BatchID_UNIQUE` (`BatchID`),
  KEY `fk_Batch_Course1` (`Course_CourseID`),
  CONSTRAINT `fk_Batch_Course1` FOREIGN KEY (`Course_CourseID`)
  REFERENCES `course` (`CourseID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
4

2 に答える 2

1

エラー メッセージは、次の文字列を明確に示しています。

UNIQUE KEY `BatchID_UNIQUE` (`BatchID`)

したがって、あなたがしなければならないことは、このインデックスを削除することです(...

ALTER TABLE `batch` DROP INDEX `BatchID_UNIQUE`

... コマンドを実行するか、この行をテーブルの定義から除外します ( CREATE TABLE)。

バッチ ID を一意にする必要が本当にないことを前提としています (つまり、INSERTステートメントに論理エラーはありません。ただし、そのように思われます: ペアBatchID-Course_CourseIDは既に一意として定義されています (PRIMARY KEY を介して)) 。 .

于 2012-09-09T18:14:00.447 に答える
0

このようにしてみてください。バッチ テーブルを削除してから、この sql を実行します。一意のキーに対して2つの同じ値を持つことはできないと正しく答えました。そのため、一意のキー行も削除しました。

CREATE TABLE IF NOT EXISTS `batch` (
  `BatchID` int(11) NOT NULL,
  `Course_CourseID` int(11) NOT NULL,
  `NoOfStudents` int(11) DEFAULT NULL,
  `ClassRoom` varchar(45) DEFAULT NULL,
  `StartDate` varchar(45) DEFAULT NULL,
  `Day` varchar(45) DEFAULT NULL,
  `Time` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`BatchID`,`Course_CourseID`),
  KEY `Course_CourseID` (`Course_CourseID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `batch` ADD CONSTRAINT `batch_ibfk_2` FOREIGN KEY (`Course_CourseID`)
REFERENCES `course` (`CourseId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
于 2012-09-09T21:10:03.163 に答える