8

我有一个带有 ISBN 的 MySQL MyISAM 表。我想创建一个 UNIQUE 索引,如果值为空或 null,则不会引发“重复”错误。

这可能吗?

4

2 回答 2

3

你可以使用这样的东西,

ALTER TABLE tbl_name 添加唯一的 index_name (column_list):

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

于 2012-07-03T02:14:51.813 回答
3

由于您使用的是 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`)
) 

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

于 2012-07-03T02:19:01.437 回答