博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 唯一索引与null.md
阅读量:6094 次
发布时间:2019-06-20

本文共 1091 字,大约阅读时间需要 3 分钟。

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); -- okinsert into tb(a,b,c) values (null,null,null); -- still okinsert into tb(a,b,c) values (null,null,null); -- still okinsert into tb(a,b,c) values (1,null,null); -- okinsert into tb(a,b,c) values (1,2,null); -- okinsert into tb(a,b,c) values (1,2,3); -- okinsert into tb(a,b,c) values (1,null,null); -- SHOULD FAIL, BUT DOESN'Tinsert into tb(a,b,c) values (1,2,null); -- SHOULD FAIL, BUT DOESN'Tinsert 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.

参考文章

转载地址:http://lvwza.baihongyu.com/

你可能感兴趣的文章
希尔排序(shell‘ sort)
查看>>
【Helm】release太多导致报错,一次从问题排查,修改源码编译到构建tiller镜像修复的经历...
查看>>
独家解密 | 第三届Aliware生态大会探访
查看>>
第十六章:数据绑定(一)
查看>>
数据库入门-pymysql模块的使用
查看>>
如何在命令长度受限的情况下成功get到webshell(函数参数受限突破、mysql的骚操作)...
查看>>
Linux基础命令---mktemp
查看>>
JavaScript 2018 中即将迎来的新功能
查看>>
微软产品有七成漏洞是内存安全问题
查看>>
Google 谈论杀死 URL 的第一步
查看>>
安装 TensorFlow
查看>>
在spring+beranate中多数据源中使用 ThreadLocal ,总结的原理 --费元星
查看>>
Java中正则表达式
查看>>
react native 集成人脸识别 --android
查看>>
回忆里的那个人
查看>>
React.js 集成 Spring Boot 开发 Web 应用
查看>>
Java并发编程(2) AbstractQueuedSynchronizer的内部结构
查看>>
cheatEngine破解百度云加速的办法
查看>>
react 高阶组件的 理解和应用
查看>>
Fabric CA环境的集成
查看>>