mysql 的唯一索引要求所有参与的列都不能够为 null 值,如果唯一索引中的任何一个元素含有 null 值,则唯一约束将不起作用。

示例代码

create table tb (

a int,

b int,

c int,

unique index (a,b,c)

);

insert into tb(a,b,c) values (null,null,null); -- ok

insert into tb(a,b,c) values (null,null,null); -- still ok

insert into tb(a,b,c) values (null,null,null); -- still ok

insert into tb(a,b,c) values (1,null,null); -- ok

insert into tb(a,b,c) values (1,2,null); -- ok

insert into tb(a,b,c) values (1,2,3); -- ok

insert into tb(a,b,c) values (1,null,null); -- SHOULD FAIL, BUT DOESN'T

insert into tb(a,b,c) values (1,2,null); -- SHOULD FAIL, BUT DOESN'T

insert into tb(a,b,c) values (1,2,3); -- fails correctly

解决方案

给参与唯一索引的字段设置缺省值,如果是数值可以统一设置为 -1,如果是字符串可以设置为 ""

官网的描述

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. For all engines, a UNIQUE index permits multiple NULL values for columns that can contain NULL. If you specify a prefix value for a column in a UNIQUE index, the column values must be unique within the prefix.

mysql 唯一索引为null_mysql 唯一索引与null.md相关推荐

  1. mysql设置空值显示null_mysql的空值与NULL的区别

    Mysql数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  2. mysql 唯一索引_MySQL学会用索引,让你数据库的查询速度起飞

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度.打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一 ...

  3. mysql 唯一索引 性能_普通索引和唯一索引的区别、性能差异,以及其他索引简介...

    唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n). 1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最 ...

  4. mysql uuid 索引_Mysql使用Java UUID作为唯一值时使用前缀索引测试

    Mysql可以使用字符串前缀 作为索引 以节约空间. 下面我们以 Java的UUID 生成的 32位(移除UUID中的 中划线)字符串 来做一下 测试. 表结构: CREATE TABLE `test ...

  5. MySQL的索引(普通索引、唯一索引,主键索引、组合索引、全文索引、空间索引)相关操作

    目录 索引介绍 Hash索引和B+tree索引的区别 应用场景 索引分类 普通索引 创建单列索引--普通索引(3种语法) 查看数据库中的索引 查看数据表中的索引 删除索引 唯一索引 主键索引 组合索引 ...

  6. Mysql唯一索引、主键索引、联合索引

    数据库索引都有哪些类型 普通索引 --加速查找 没有任何限制 主键索引 --加速查找+不能为空+不能重复 一般建表同时完成创建 一个表只能有一个主键 不允许控制 唯一索引 --加速查找+不能重复 索引 ...

  7. mysql 建表时创建唯一索引

    Mysql建表与索引使用规范整理 一,设计表规范: MySQL建表,字段需设置为非空,需设置字段默认值: MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL: MySQL建表,如果 ...

  8. mysql中主键、普通索引、唯一索引和全文索引

    SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...

  9. mysql 主键 索引类型_MYSQL常见索引类型(主键索引/唯一索引/普通索引/组合索引)...

    在数据量特别大的数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令MySQL的查询和运行更加高效. 一.MySQL常见的索引类型如下 MySQL常见索引有:主键索引.唯一索引.普 ...

  10. Mysql 主键 联合主键 索引 唯一索引 被抠细节问死的问题

    1.一张表中可以有几个主键? 答:一个. 2.那联合主键是什么? 答:一张表多个主键,就是联合主键,可以由多个列形成联合主键,但是主键只能有一个 3.主键作用是什么? 答:主键的作用是保证数据的唯一性 ...

最新文章

  1. 上海AI高地雏形初现 徐汇区抢占产业潮头
  2. Java I/O在Android中应用(一)
  3. Apache设置多网站
  4. [转载]IPhone之NSFileManager的使用
  5. 【小程序开发者专享】腾讯云联手多家科技企业,聚焦小程序·云开发实践!...
  6. 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例
  7. 关于类模版迭代器提出时的错误
  8. oracle sqe值,质量感悟 | 无论什么层次的供应商都喜欢跟SQE中的高手过招儿
  9. java堆外内存为何比java堆更适合用来进行网络IO操作
  10. no system images installed for this target这个问题如何解决?
  11. 吴恩达机器学习笔记-非监督学习
  12. app式成语_成语100app
  13. Ubuntu上开发python的十大IDE
  14. Neural Graph Collaborative Filtering【阅读笔记】
  15. 计算机领域国际顶级会议
  16. 机箱前面板的耳机孔没声音的解决办法
  17. CodeForces 19E 仙女fairy
  18. 异星工厂 自动机器人_异星工厂自动科研系统建造技巧_图文攻略
  19. 笔记2:VC++ socket通信实例
  20. SAP应用在华登陆Windows Azure公有云

热门文章

  1. vmware Esxi 回收Thin模式磁盘空间
  2. 外贸网站服务器搬迁方案,WordPress网站迁移到新服务器教程
  3. html黑洞效果,HTML5 Canvas炫酷宇宙黑洞引力特效
  4. arcgis分析道路节点中心性degree,closeness,betweenness
  5. go fyne 跨平台开发框架 gui 编程 抖音下载 去水印编程 学习交流
  6. 二维数组与数组指针详解
  7. 删除windows桌面右键出现的无用的菜单项(RegClean工具下载使用自动清理)
  8. 【postgres】postgres 数据库迁移
  9. Oracle锁表会影响查询效率么,oracle锁表查询,资源占用,连接会话,低效SQL等性能检查...
  10. 深信服虚拟服务器 视频教程,5分钟,轻松玩转深信服服务器虚拟化