mysql唯一索引EXCEPT为空或null

时间:2012-07-03 02:03:03

标签: mysql database indexing

我有一个带有ISBN的MySQL MyISAM表。我想创建一个不会抛出"重复"的独特索引。如果值为空或为null,则出错。

这可能吗?

2 个答案:

答案 0 :(得分:3)

你可以使用这样的东西,

ALTER TABLE tbl_name ADD UNIQUE index_name(column_list):

此语句创建一个索引,其值必须是唯一的(NULL值除外,可能会多次出现)。请参阅MySQL INDEXES

答案 1 :(得分:2)

由于您使用的是MyISAM(或INNODB)存储引擎,因此简短的回答是否定的。多个空字符串不适用于唯一索引约束,即使多个空值也是如此。如果您想要一个仅限SQL的解决方案,最好的办法是在ISBN字段上创建常规索引,然后使用存储过程充当插入代理 - 如果不为null或为空,则检查唯一性。

如果只为null工作,这是一个基本的创建:

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

只需注意......请记住,为int指定的'13'只是在查询中返回时显示的位数,而不是整数的大小。