2012-07-03 118 views
6

我有一個MySQL MyISAM表與ISBN。我想創建一個UNIQUE索引,如果該值爲空或空值,將不會拋出「重複」錯誤。mysql唯一索引除空或空

這可能嗎?

回答

2

由於您使用的是MyISAM(或INNODB)存儲引擎,因此簡短回答是否定的。即使有多個空值,多個空字符串也不適用於唯一索引約束。如果你想要一個只有SQL的解決方案,最好的辦法是在ISBN字段上創建一個常規索引,然後使用一個存儲過程作爲插入代理 - 如果不爲空或爲空,則檢查唯一性。

如果只是爲空值,你的工作,這裏是一個基本的創建:

CREATE TABLE `books` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `isbn` int(13) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `isbn` (`isbn`) 
) 

只是注意......還記得「13」 INT指定僅僅是數字的個數在返回時,它會顯示一個查詢,而不是整數的大小。

+1

我沒有NULL的罰款。設置它,我會簡單地設置INT(13)DEFAULT NULL,並應該工作? – nick

+1

@nick是的,看到我在上面的問題中添加的create語句,您也可以在ALTER TABLE中使用它。 – Ray

3

你可以使用這樣的事情,

ALTER TABLE tbl_name ADD UNIQUE INDEX_NAME(column_list中):

此語句創建一個索引其值必須是唯一的(與NULL值的異常,它可以出現多次)。請參閱MySQL INDEXES