Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql唯一索引,空或空除外_Mysql_Database_Indexing - Fatal编程技术网

mysql唯一索引,空或空除外

mysql唯一索引,空或空除外,mysql,database,indexing,Mysql,Database,Indexing,我有一个带有ISBNs的MySQL MyISAM表。我想创建一个唯一的索引,如果值为空或null,它不会抛出“复制”错误 这可能吗?你可以用这样的东西 更改表tbl_名称添加唯一索引_名称(列列表): 此语句创建一个索引,该索引的值必须是唯一的(空值除外,空值可能出现多次)。请参阅。因为您使用的是MyISAM(或INNODB)存储引擎,简短的回答是“否”。对于唯一索引约束,多个空字符串不起作用,即使多个空字符串会起作用。如果您想要一个纯SQL的解决方案,最好的办法是在ISBN字段上创建一个常规索

我有一个带有ISBNs的MySQL MyISAM表。我想创建一个唯一的索引,如果值为空或null,它不会抛出“复制”错误


这可能吗?

你可以用这样的东西

更改表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表中使用它。