`
hongtoushizi
  • 浏览: 358237 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

mysql 中存在null和空时创建唯一索引

阅读更多

好多情况下数据库默认值都有null,但是经过程序处理很多时候会出现,数据库值为空而不是null的情况。此时创建唯一索引时要注意了, 此时数据库会把空作为多个重复值,而创建索引失败,示例如下:
步骤一:

mysql> select phone ,count(1) from User group by phone;
+-----------------+----------+
| phone           | count(1) |
+-----------------+----------+
| NULL            |       70 |
|                 |       40 |
| +86-13390889711 |        1 |
| +86-13405053385 |        1 |
步骤一中发现数据库中有70条null数据,有40条为空的数据。

步骤2:

mysql> select count(1)  from  User where phone is null;
+----------+
| count(1) |
+----------+
|       70 |
+----------+
1 row in set (0.00 sec)

经2再次验证数据库中null和空不一样的两个值。

步骤3:

mysql> alter table User add constraint uk_phone  unique(phone);
ERROR 1062 (23000): Duplicate entry '' for key 'uk_phone'
此时创建索引提示‘ ’为一个重复的属性。

步骤4:将所有的空值改成null.

mysql> update User set  phone  = NULL  where phone = '';
Query OK, 40 rows affected (0.11 sec)
Rows matched: 40  Changed: 40  Warnings: 0
步骤5:再次创建唯一索引

mysql>  alter table User add constraint uk_phone  unique(phone);
Query OK, 0 rows affected (0.34 sec)
Records: 0  Duplicates: 0  Warnings: 0

创建成功,OK了

 

 

 

 

 

1
1
分享到:
评论

相关推荐

    mysql 中存在null和空时创建唯一索引的方法

    据库默认值都有null,此时创建唯一索引时要注意了,此时数据库会把空作为多个重复值

    MySQL中NULL对索引的影响深入讲解

    看了很多博客,也听过很多人说,包括我们公司的DBA,说MySql中如果某一列中含有null,那么包含该列的索引就无效了。 翻了下《高性能MySQL第二版》和《MySQL技术内幕——InnoDB存储引擎第2版》,并没有看到关于这个...

    MySQL 创建索引(Create Index)的方法和语法结构及例子

    CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON ... HASH | RTREE} 代码如下: — 创建无索引的表格 create table testNoPK ( id int not null, name varchar(10) ); — 创建

    MySQL创建索引,查看以及删除

    NULL 博文链接:https://wy649898543.iteye.com/blog/1446493

    Mysql面试过关!(详解:索引+常用引擎+常见问题+sql调优)

    3.9 查询条件使用is null时正常走索引,使用is not null时,不走索引 3.10 查询条件使用not in、not exists时,如果是主键则走索引,如果是普通索引,则索引失效 3.11 当查询条件涉及到order by、l

    MySQL中NULL对索引的影响1

    1. 单列索引 2. 联合索引 3. 其他

    MySQL中文参考手册.chm

    10.2.3 调节服务器参数 10.2.4 MySQL 怎样打开和关闭数据库表 10.2.5 在同一个数据库中创建大量数据库表的缺点 10.2.6 为什么有这么多打开的表? 10.2.7 MySQL 怎样使用内存 10.2.8 ...

    mysql查询优化之索引优化

    NULL 博文链接:https://opq149766320.iteye.com/blog/561173

    2023年,MySQL最新最详细的教程资源 详细讲解了MySQL的各种用法

    MySQL NULL 值处理 MySQL 正则表达式 MySQL 事务 MySQL ALTER命令 MySQL 索引 MySQL 临时表 MySQL 复制表 MySQL 元数据 MySQL 序列使用 MySQL 处理重复数据 MySQL 及 SQL 注入 MySQL 导出数据 MySQL 导入数据 MySQL ...

    大厂常见经典mysql面试题.rar

    MySQL中的主键和唯一键有什么区别? 主键和唯一键都是用来保证表中数据的唯一性的。主键是一列或一组列,它们的值在表中唯一,并且不能为NULL。在MySQL中,可以使用PRIMARY KEY关键字来定义主键。唯一键也是一列或一...

    MySQL 5.1中文手冊

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

    MySQL中的唯一性约束与NULL详解

    为了防止他们重复发消息,插入多条重复记录,所以在表中的几个列上加了个唯一性索引。 CREATE UNIQUE INDEX IDX_UN_LOAN_PLAN_APP ON testTable (A, B, C); 这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 ...

    MySQL中文参考手册

    o 4.16 升级和降级(downgrading)时有什么特别要做的事情吗? + 4.16.1 从一个 3.22 版本升级到 3.23 + 4.16.2 从一个 3.21 版本升级到 3.22 + 4.16.3 从一个 3.20 版本升级到 3.21 + 4.16.4 升级到其他的...

    MySQL中建立索引的集中方式

     在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:  CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,...

    Mysql建表与索引使用规范详解

    一、 MySQL建表,字段需设置为非空,需设置字段默认值。二、 MySQL建表,字段需...六、 如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。七、 建立索引index(part1,part2,par

    详解mysql中的冗余和重复索引

    mysql允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能。  重复索引是指的在相同的列上按照相同的顺序创建的相同...

    MySQL 5.1官方简体中文参考手册

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

    MySQL索引之主键索引

    在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,...

Global site tag (gtag.js) - Google Analytics