spraff spraff - 4 months ago 12
SQL Question

Stop MySQL tolerating multiple NULLs in a UNIQUE constraint

My SQL schema is

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


MySQL is allowing the following statement to be repeated, resulting in duplicates.

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


despite having

UNIQUE ( `name`, `bar` )


Why is this tolerated and how do I stop it?

Answer

Warning: This answer is outdated. As of MySQL 5.1, BDB is not supported.

It depends on MySQL Engine Type. BDB doesn't allow multiple NULL values using UNIQUE but MyISAM and InnoDB allows multiple NULLs even with UNIQUE.

Comments