mysql唯一索引,空或空除外
我有一个带有ISBNs的MySQL MyISAM表。我想创建一个唯一的索引,如果值为空或null,它不会抛出“复制”错误mysql唯一索引,空或空除外,mysql,database,indexing,Mysql,Database,Indexing,我有一个带有ISBNs的MySQL MyISAM表。我想创建一个唯一的索引,如果值为空或null,它不会抛出“复制”错误 这可能吗?你可以用这样的东西 更改表tbl_名称添加唯一索引_名称(列列表): 此语句创建一个索引,该索引的值必须是唯一的(空值除外,空值可能出现多次)。请参阅。因为您使用的是MyISAM(或INNODB)存储引擎,简短的回答是“否”。对于唯一索引约束,多个空字符串不起作用,即使多个空字符串会起作用。如果您想要一个纯SQL的解决方案,最好的办法是在ISBN字段上创建一个常规索
这可能吗?你可以用这样的东西 更改表tbl_名称添加唯一索引_名称(列列表): 此语句创建一个索引,该索引的值必须是唯一的(空值除外,空值可能出现多次)。请参阅。因为您使用的是MyISAM(或INNODB)存储引擎,简短的回答是“否”。对于唯一索引约束,多个空字符串不起作用,即使多个空字符串会起作用。如果您想要一个纯SQL的解决方案,最好的办法是在ISBN字段上创建一个常规索引,然后使用一个存储过程作为插入代理——如果不是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”只是在查询中返回时显示的位数,而不是整数的大小 我不介意有空的。要设置这个,我是否可以简单地将INT(13)默认值设为NULL,这样应该可以工作?@nick Yes,请参阅我在上面的问题中添加的create语句,您也可以在ALTER表中使用它。