0
我創建一個表: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
有誰知道我在做什麼錯在這裏?
您所選擇的獨特組合鍵索引名稱「CLUSTERED」令人困惑。你知道聚集索引是什麼嗎?如果您使用的是innodb,那麼您爲表定義的每個主鍵都是聚簇索引。每個innodb表只能有一個聚簇索引作爲聚簇索引,根據索引鍵值對數據行進行排序並存儲在表中。因此,只能在每個表上創建一個聚簇索引,因爲數據行本身只能按一個順序排序。 http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html – 2010-03-26 07:33:42