MySQL独特的聚簇约束不按预期约束

时间:2010-03-26 02:50:21

标签: sql mysql

我正在创建一个表格:

CREATE TABLE movies
(
 id     INT       AUTO_INCREMENT PRIMARY KEY,
 name   CHAR(255) NOT NULL,
 year   INT       NOT NULL,
 inyear CHAR(10), 
 CONSTRAINT UNIQUE CLUSTERED (name, year, inyear)
);

(这是jdbc SQL)

创建一个带有clustered索引的MySQL表,“索引类型”是“唯一的”,并跨越三个聚簇列:

mysql screen http://img510.imageshack.us/img510/930/mysqlscreenshot.th.jpg
full size

但是,一旦我转储了我的数据(没有抛出异常),我看到唯一性约束失败了:

SELECT * FROM movies
WHERE name = 'Flawless' AND year = 2007 AND inyear IS NULL;

给出:

id,     name,       year, inyear
162169, 'Flawless', 2007, NULL
162170, 'Flawless', 2007, NULL

有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

MySQL不认为NULL值相等;因此,为什么唯一约束似乎不起作用。要解决此问题,可以将计算列添加到表中,该表定义为:

nullCatch as (case when inyear is null then '-1' else inyear)

将此列替换为约束中的'inyear':

 CONSTRAINT UNIQUE CLUSTERED (name, year, nullCatch)