阻止MySQL在UNIQUE约束中容忍多个NULL

spr*_*aff 9 mysql sql mysql5

我的SQL架构是

CREATE TABLE Foo (
 `bar` INT NULL ,
 `name` VARCHAR (59) NOT NULL ,
 UNIQUE ( `name`, `bar` )
) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

MySQL允许重复以下语句,导致重复.

INSERT INTO Foo (`bar`, `name`) VALUES (NULL, 'abc');
Run Code Online (Sandbox Code Playgroud)

尽管有

UNIQUE ( `name`, `bar` )
Run Code Online (Sandbox Code Playgroud)

为什么容忍这种情况,如何阻止它?

Emi*_*dın 13

警告:这个答案已经过时了.从MySQL 5.1开始,不支持BDB.

这取决于MySQL Engine Type.BDB多个不允许NULL使用值,UNIQUEMyISAMInnoDB允许多个NULLS甚至用UNIQUE.