我有一个带有ISBN的MySQL MyISAM表。我想创建一个不会抛出"重复"的独特索引。如果值为空或为null,则出错。
这可能吗?
答案 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'只是在查询中返回时显示的位数,而不是整数的大小。