9

私のSQLスキーマは

CREATE TABLE Foo (
 `bar` INT NULL ,
 `name` VARCHAR (59) NOT NULL ,
 UNIQUE ( `name`, `bar` )
) ENGINE = INNODB;

MySQL では、次のステートメントの繰り返しが許可されているため、重複が発生します。

INSERT INTO Foo (`bar`, `name`) VALUES (NULL, 'abc');

持っているにもかかわらず

UNIQUE ( `name`, `bar` )

これが許容される理由と、それを止めるにはどうすればよいですか?

4

4 に答える 4

14

警告: この回答は古くなっています。MySQL 5.1 以降、BDB はサポートされていません。

に依存しMySQL Engine Typeます。butを使用して複数の値をBDB許可することはできず、を使用しても複数の を許可します。NULLUNIQUEMyISAMInnoDBNULLUNIQUE

于 2012-02-14T16:49:04.367 に答える
2

一般に、ストレージ エンジンによってはNULL、一意の値として表示される場合と表示されない場合があります。NULL一意の値として認識しないストレージ エンジンを使用している必要があります。InnoDB または MyISAM。

これを回避するには、99999999 などの「null 値」を作成します。これはNULL、ストレージ エンジンが一意のキーで null を処理する方法を変更する方法がないことを認識できます。

于 2012-02-14T16:49:54.087 に答える