精华内容
下载资源
问答
  • MYSQL 引擎innodb ,设置了唯一索引的列值 允许 多个NULL值存在。 示例: 字段 userCardNum 添加了唯一索引 证实是允许存在的多个NULL值数据的: 原由: 因为这里 NULL 的定义 ,是指 未知值。 所以多...

    MYSQL 引擎innodb ,设置了唯一索引的列值  允许 多个NULL值存在。

     

     

    示例:

    字段 userCardNum 添加了唯一索引

     

    证实是允许存在的多个NULL值数据的:

     原由:

    因为这里 NULL 的定义 ,是指 未知值。 所以多个 NULL ,都是未知的,不能说它们是相等的,也不能说是不等,就是未知的。所以多个NULL的存在是不违反唯一约束的。

    展开全文
  • 今天正在吃饭,一个朋友提出了一个他面试中遇到的问题,MySQL允许在唯一索引字段中添加多个NULL值。 这个问题对于我一个非专业DBA来说,也没特地去验证过,所以正好借此机会验证一下,做个记录: 测试环境: ...

    今天正在吃饭,一个朋友提出了一个他面试中遇到的问题,MySQL允许在唯一索引字段中添加多个NULL值。

    这个问题对于我一个非专业DBA来说,也没特地去验证过,所以正好借此机会验证一下,做个记录:

    测试环境:

    数据库:MySQL5.7.25
    数据库引擎:InnoDB
    连接工具:Navicat Premium

    首先,创建数据库,并创建测试表 test:

    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test`  (
      `id` int(11) NOT NULL COMMENT 'ID',
      `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '姓名',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

    然后,我们给name字段添加一个唯一索引:

    ALTER TABLE `test` ADD UNIQUE ( `name`);

    最后,我们尝试插入两条name字段为null的数据:

    INSERT INTO `test` VALUES (1, NULL);
    INSERT INTO `test` VALUES (2, NULL);

    并没有报错,说明MySQL允许在唯一索引字段中添加多个NULL值

    数据表如下:

    MySQL的官方文档给出的解释为:

    A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. This constraint does not apply to NULL values except for the BDB storage engine. For other engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.

    我们可以看出,此约束不适用于除BDB存储引擎之外的空值。对于其他引擎,唯一索引允许包含空值的列有多个空值。

     

    网友给出的解释为:

    在sql server中,唯一索引字段不能出现多个null值

    在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。

    根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的,在oracel也是如此。

    这个解释很形象,既不相等,也不不等,所以结果未知。

    至于,sqlserver和MySQL其他引擎还有待验证。

    展开全文
  • 小结:1,唯一索引可在索引列插入null  2,适用于表中的一些业务列,不能出现重复,但可以插入空值,比如用户表的身份证号码 来自 “ ITPUB博客 ” ,链接:...

    create table t_unique(a int);
    create unique index uni_idx_t_unique on t_unique(a);
    insert into t_unique values(null);
    insert into t_unique values(null);
    insert into t_unique values(1);
    insert into t_unique values(1);--报违反唯一约束
     
    小结:1,唯一索引可在索引列插入多次null
          2,适用于表中的一些业务列,不能出现重复,但可以插入空值,比如用户表的身份证号码

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-745327/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/9240380/viewspace-745327/

    展开全文
  • 最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ...

    最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息:

    CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ON Users(weixin_openid);
    
    因为发现对象名称 'dbo.Users' 和索引名称 'weixin_openid_ui' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (<NULL>)。

    但是理论而言, null 和 null 值是不相等的,为什么不能出现在 唯一索引字段中呢?

    下面是mysql的 innodb 引擎的测试:

    可以看到, 在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的。sql server有点不合理,不知道oracle是否允许在唯一索引的自动中出现多个null值?没有oracle环境,无法测试了。搜索了一下,发现oracle和mysql是一致的,是逻辑自洽的。这样也更加符合实际的业务场景。

    Oracle唯一约束中NULL的处理

    http://database.ctocio.com.cn/tips/427/8292927.shtml

     

    注:

    记得在oracle和mysql中 唯一索引和主键索引的一个重要区别就是:唯一索引允许被索引的字段为null,而主键索引不允许主键值为null.

    展开全文
  • 在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。 根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不...
  • 4.索引需要定期维护,因为当记录增加或者索引列被修改的时候,索引本身也会被修改,这意味着针对每记录的insert,update,delete操作,需要更的磁盘I/O,因为索引需要一部分磁盘I/O。所以不必要
  • 有效使用索引 1.一般使用索引查询数据比全表扫描...4.索引需要定期维护,因为当记录增加或者索引列被修改的时候,索引本身也会被修改,这意味着针对每记录的insert,update,delete操作,需要更的磁盘I/O,因为...
  • 我坚信我的想法是正确的,在网上查了些网页,有说可以有多个NULL,有多只能有一个NULL值,我只有自己实验看看,分别在mssql2003和mssql2005上试验,竟然都只允许有一个NULL,插入第二个NULL时就报错。 唯一索引真.....
  • 据库默认值都有null,此时创建唯一索引时要注意了,此时数据库会把空作为多个重复值
  • 此时创建唯一索引时要注意了, 此时数据库会把空作为多个重复值,而创建索引失败,示例如下:步骤一: mysql&gt; select phone ,count(1) from User group by phone;+-----------------+----------+| phone .....
  • 唯一索引

    2018-04-28 16:20:35
    如果将多个字段一起设置为 唯一索引,如1、job 和 deptno 不允许具有索引值相同的行。如:2、但是其中有一个是可以相同的3、不过null除外,两个都是null 的话,记录可以相同。如:...
  • 主键索引:唯一切不为...唯一索引:唯一可为null;唯一约束放在一 个或者多个列上,这些列或列的组合必须有唯一的;创建唯一性的非聚簇索引,但是,也可以指定所创建的索|是聚簇索引。 转载于:https://www.cnblo...
  • 一张表只能有一个主键,但可以创建多个唯一索引; ③.主键创建后一定包含一个唯一索引唯一索引并一定是主键; ④.主键不能为null唯一索引可以为null; ⑤.主键可以做为外键,唯一索引不行; 二 主键约束比唯一...
  • mysql建立唯一索引

    2019-09-18 14:58:24
    name字段建立了唯一索引null可以多个,但是空字符串只能一个
  • 一张表只能有一个主键,但可以创建多个唯一索引; ③.主键创建后一定包含一个唯一索引唯一索引并一定是主键; ④.主键不能为null唯一索引可以为null; ⑤.主键可以做为外键,唯一索引不行; ...
  • mysql中的唯一索引

    2021-01-31 16:47:14
    1. 前言   工作使用的数据库是mysql,经常会与唯一索引打交道,借此记录下来...主键和唯一索引可以是表中多个字段的组合,一般只会在一列上建立唯一索引,多列的话则会考虑联合索引 关于唯一索引和主键区别的一些资
  • 主键和唯一索引的区别

    千次阅读 2018-08-14 09:39:40
    一张表只能有一个主键,但可以创建多个唯一索引; ③.主键创建后一定包含一个唯一索引唯一索引并一定是主键; ④.主键不能为null唯一索引可以为null; ⑤.主键可以做为外键,唯一索引不行;   二 主键约束比...
  • 主键,唯一索引 聚集索引的关系

    万次阅读 2010-12-06 11:15:00
    主键是唯一的,所以创建了一个主键的同时,也就这个字段创建了一个唯一的索引 主键一唯一索引的区别:1 一个表的主键只能有一个,而唯一索引可以建多个。2 主键可以作为其它表的外键。3 主键不可为null唯一索引...
  • 主键和唯一索引

    2017-02-21 17:45:13
    主键和唯一索引 主键:主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。...1、主键不允许有空值,唯一索引允许有空值(唯一索引不允许有重复,但 NULL 2、主键
  • MySQL 中的唯一索引

    千次阅读 2018-05-10 16:22:40
    允许 Null,允许多个 Null ② 关于空值(空字符串)(Empty String) 允许空字符串,但不允许重复 参考资料: 1、MySQL 唯一性约束与 NULL https://yemengying.com/2017/05/18/mysql-unique-key-null/ ...
  • oracle唯一索引

    2017-06-19 10:16:51
    可以有多个null
  • 主键和唯一索引的区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键不能 null,而唯一索引可以为 null。 主键可以被其他表引用为外键,而...一个表只能有一个主键,但可以有多个唯一索引。 ...
  • 主键索引就是聚簇索引,每张表有且只能有一个主键,可以由一个或多个字段组成。 主键索引的三个条件:1.主键键值必须是唯一2.不能含有null值3.保证主键是自增的 自增列作主键可以使写入的顺序也是自增的,这个可以...
  • 主键索引和唯一索引的区别

    千次阅读 2018-09-26 19:09:54
    2.表里面只能有一个主键约束,但可以有多个唯一约束。 3.主键列上没有任何两行具有相同值(即重复值),不允许空(null)。 4.主键可作外键,唯一索引不可。 唯一约束(UNIQUE): 1.唯一约束用来限制不受主键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 551
精华内容 220
关键字:

唯一索引多个null