我正在创建一个表格:
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
有谁知道我在这里做错了什么?
答案 0 :(得分:4)
MySQL不认为NULL值相等;因此,为什么唯一约束似乎不起作用。要解决此问题,可以将计算列添加到表中,该表定义为:
nullCatch as (case when inyear is null then '-1' else inyear)
将此列替换为约束中的'inyear':
CONSTRAINT UNIQUE CLUSTERED (name, year, nullCatch)