精华内容
下载资源
问答
  • 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其他引擎还有待验证。

    展开全文
  • MySQL中有唯一性约束的能否为null

    千次阅读 2017-01-16 14:55:11
      唯一索引允许null.   参考链接        

     

     

    唯一索引中允许有null.

     

    参考链接

     

     

     

     

    展开全文
  • 最近碰到个问题,用下面的测试表来描述, [code="java"] create table TEST ... col_3 VARCHAR(128) not null, col_4 VARCHAR(128) not null, UNIQUE KEY (col_1, col_2, col_3), CON...
    最近碰到个问题,用下面的测试表来描述,
    

    create table TEST
    (
    col_1 INT,
    col_2 INT,
    col_3 VARCHAR(128) not null,
    col_4 VARCHAR(128) not null,
    UNIQUE KEY (col_1, col_2, col_3),
    CONSTRAINT FOREIGN KEY (col_1) REFERENCES T2(ID) ON DELETE CASCADE,
    CONSTRAINT FOREIGN KEY (col_2) REFERENCES T3(ID) ON DELETE CASCADE

    )
    comment='测试表'
    ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

    本意是要求如下:

    INSERT INTO TEST (col_1, col_2, col_3, col_4) VALUES (1, NULL, 'TEST', 'VALID'); //OK
    INSERT INTO TEST (col_1, col_2, col_3, col_4) VALUES (1, NULL, 'TEST', 'VALID'); //ERROR

    但是实际上MYSQL却可以插入数据,没有提示违反了UNIQUE KEY (col_1, col_2, col_3),这个是MYSQL对NULL处理的方法引起的。虽然很多用户在给MYSQL提了N个关于这个的BUG,但是MYSQL死抱着SQL specs不放,就是不改或者提供可选的解决方案。

    那究竟有没方法可以满足我的本意呢?有人提供了这样的一个方法:

    create table TEST
    (
    ID INT not null AUTO_INCREMENT,
    col_1 INT,
    col_2 INT,
    col_3 VARCHAR(128) not null,
    col_4 VARCHAR(128) not null,
    PRIMARY KEY (ID),
    CONSTRAINT FOREIGN KEY (col_1) REFERENCES T2(ID) ON DELETE CASCADE,
    CONSTRAINT FOREIGN KEY (col_2) REFERENCES T3(ID) ON DELETE CASCADE
    )
    comment='测试表'
    ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

    首先,去掉了组合的唯一索引,而是加入了一个自增长PK:ID
    其次,为此表创建一个triigger:

    CREATE TRIGGER `TEST_BEFORE_INS`
    BEFORE INSERT ON `TEST` FOR EACH ROW
    BEGIN
    SET NEW.id=(SELECT id FROM TEST WHERE col_1<=>NEW.col_1 AND col_2<=>NEW.col_2 AND col_3<=>NEW.col_3);
    END

    再来测试下:

    INSERT INTO TEST (col_1, col_2, col_3, col_4) VALUES (1, NULL, 'TEST', 'VALID'); //OK
    INSERT INTO TEST (col_1, col_2, col_3, col_4) VALUES (1, NULL, 'TEST', 'VALID'); //ERROR:Duplicate entry '1' for key 'PRIMARY'

    报主键重复错误,看来,基本满足了我的本意需求。
    展开全文
  • 解决办法:唯一索引可在索引插入多次null email可以有多条email为null的记录,将冲突的字段设置为null,解决   在sql server中,唯一索引字段不能出现多个null值 在mysql 的innodb引擎中,是允许唯一...
  • CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull ON YourTable(yourcolumn) WHERE yourcolumn IS NOT NULL;
  • oracle null值和索引

    千次阅读 2018-09-05 11:03:50
    NULL值是关系数据库系统布尔型(true,false,unknown)中比较特殊类型的一种值,通常称为...正是基于这样一个特性,对于NULL上的B树索引导致了is null/is not null不走索引的情形,下面描述了NULL值与索引以及索...
  • What you're looking for is indeed part of the ANSI standards SQL:92, SQL:1999 and SQL:2003, ie a UNIQUE constraint must disallow duplicate non-NULL values but accept multiple NULL values. In the ...
  • 别踩坑!使用MySQL唯一索引请注意

    万次阅读 多人点赞 2019-01-28 21:33:14
    背景 在程序设计中了,我们往往需要...但是我们不能确保同时有两个人使用同一个手机号注册到我们的系统中,因此这里就需要在更深的层次去确保手机号的唯一性了。不同存储方案,解决方式不一样,这里以MySQL例,我...
  • 当Mysql中建立的联合索引, 只要索引中的某一的值空时(NULL),即便其他的字段完全相同,也不会引起唯一索引冲突。 原因: Mysql官方文档中有这样的解释 A UNIQUE index creates a constraint such that all ...
  • 唯一列中只允许有一个空值的情况

    千次阅读 2018-02-12 15:25:09
    尽管SQL标准允许在有唯一约束的上存在多个空值,PostgreSQL 也是这样做的 ,但是还有一些数据库系统(例如MS_SQL)在上述情况下只允许有一个空值。当这些数据库系统的用户向PostgreSQL做迁移时,他们希望在...
  • InnoDB索引允许NULL对性能有影响吗

    千次阅读 2020-07-04 00:00:00
    谈谈InnoDB辅助索引的几个特征。阅读目录0. 初始化测试表、数据1. 问题1:索引列允许为NULL,对性能影响有多少 结论1,存储大量的NULL值,除了计算更复杂之外,数据扫描...
  • 1、概念 1)、查看索引 show index from 数据库表名 2)、alter table 数据库表 add index 索引名称(数据库表字段名称) 2、索引类型: 1)、PRIMARY KEY(主键索引...2)、UNIQUE(唯一索引) ALTER TABLE table...
  • 数据库索引

    千次阅读 多人点赞 2019-08-20 22:49:54
    数据库索引 文章目录数据库索引定义优缺点索引类型建立普通...索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇...
  • mysql 索引列为Null的走不走索引

    千次阅读 2018-03-16 22:33:28
    除非真的要保存 NULL,否则就把定义 NOT NULLMySQL难以优化引用了可空的查询,它会使索引索引统计和值更加复杂。可空需要更多的储存空间,还需要在MySQL内部进行特殊处理。当可空索引的时候,每条记录...
  • Oracle唯一约束中NULL处理

    千次阅读 2018-11-25 18:22:09
    根据NULL的定义,NULL表示...根据这个定义,多个NULL值的存在应该不违反唯一约束。   CREATE TABLE TESTAA (ID NUMBER) SELECT * FROM TESTAA; ALTER TABLE TESTAA ADD UNIQUE (ID); INSERT INTO TESTAA VALU...
  • MongoDB 唯一索引

    万次阅读 2016-12-22 17:02:58
    同时索引的属性可以具有唯一性,即唯一索引唯一索引用于确保索引字段不存储重复的值,即强制索引字段的唯一性。缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法...
  • SQLServer索引管理——唯一...当上创建了唯一约束时,对应的会在该自动创建唯一索引 验证这些差异,我们创建一个测试表,创建完成后,使用sp_helpindex查看表的索引情况 CREATE TABLE uniqueTest(id INT N...
  • 唯一约束和唯一索引区别

    千次阅读 2017-09-21 21:02:55
    3) 主键上没有任何两行具有相同值(即重复值),不允许空(NULL).4) 主健可作外健,唯一索引不可; 2.唯一性约束(UNIQUE) 1) 唯一性约束用来限制不受主键约束的上的数据的唯一性,用于作为访问...
  • 在我的印象中,唯一索引保证非Null行唯一,但可以有多行NULL值,今天正好用有个业务需要这样,没想到在插入第二个NULL值时失败,提示重复值。 我坚信我的想法是正确的,在网上查了些网页,有说可以有多个NULL,有多...
  • 常用的数据库都是树结构的索引,本篇的背景也全部以树结构的索引为前提。本文旨在梳理各种常见的索引类型,简明扼要地说明它们的区别与联系,不讨论数据结构与算法。话不多说,直接上干货。 索引 数据库只做两件事情...
  • mysql 唯一键失效 CREATE TABLE `studnet_unique` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `nick` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `...
  • 唯一索引与主键索引的比较

    千次阅读 2019-02-20 23:02:51
    唯一索引 唯一索引允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的...例如,如果在 employee 表中的职员姓氏(lname) 上创建了唯一索引,则所有职员不能同姓。 主...
  • 这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 work 的。 后来由于需求的变化,修改了以前的唯一性约束,又多加了一。(至于什么加就不赘述了)。 ALTER TABLE testTable DROP INDEX IDX_UN_LOAN_PLAN_...
  • 浅谈主键索引与唯一索引

    千次阅读 2017-11-16 18:57:38
    主键索引与唯一索引 一、主键索引定义 主键索引是唯一索引的特殊类型。 数据库表通常有一组合,其值用来唯一标识表中的每一行。该称为表的主键。 在数据库关系图中为表定义一个主键将自动创建主键索引,...
  • 谈谈唯一约束和唯一索引

    万次阅读 多人点赞 2018-03-27 21:20:00
    最近在看数据库相关知识,感觉唯一约束和唯一索引好像有点类似,于是研究了一番,于是就有了这篇文章。 概念 开始之前,先解释一下约束和索引。 约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到...
  • oracle 唯一约束 和 唯一索引

    千次阅读 2016-07-18 11:43:21
    唯一约束 和 唯一索引
  • 索引(四)使用MySQL唯一索引避免重复

    千次阅读 2019-08-02 13:49:33
    摘要:这篇文章中,我们会一起聊下如何使用MySQL 索引防止一个表中的一或者多产生重复值 ...幸运的是,MySQL提供了另一种索引,叫做唯一索引允许我们可以使一个或者多个的值具有唯一性。另外,不会像主键...
  • 主键约束、唯一性约束、唯一索引

    千次阅读 2018-07-22 00:23:40
    3) 主键上没有任何两行具有相同值(即重复值),不允许空(NULL). 4) 主健可作外健,唯一索引不可; 2.唯一性约束(UNIQUE) 1) 唯一性约束用来限制不受主键约束的上的数据的唯一性,用于作为访问某行的可...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 127,610
精华内容 51,044
关键字:

唯一索引列允许为null