mysql唯一索引EXCEPT为空或null

nic*_*ick 7 mysql database indexing

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

这可能吗?

Ray*_*Ray 4

由于您使用的是 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`)
) 
Run Code Online (Sandbox Code Playgroud)

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