好多情况下数据库默认值都有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了
相关推荐
据库默认值都有null,此时创建唯一索引时要注意了,此时数据库会把空作为多个重复值
看了很多博客,也听过很多人说,包括我们公司的DBA,说MySql中如果某一列中含有null,那么包含该列的索引就无效了。 翻了下《高性能MySQL第二版》和《MySQL技术内幕——InnoDB存储引擎第2版》,并没有看到关于这个...
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) ); — 创建
NULL 博文链接:https://wy649898543.iteye.com/blog/1446493
3.9 查询条件使用is null时正常走索引,使用is not null时,不走索引 3.10 查询条件使用not in、not exists时,如果是主键则走索引,如果是普通索引,则索引失效 3.11 当查询条件涉及到order by、l
1. 单列索引 2. 联合索引 3. 其他
10.2.3 调节服务器参数 10.2.4 MySQL 怎样打开和关闭数据库表 10.2.5 在同一个数据库中创建大量数据库表的缺点 10.2.6 为什么有这么多打开的表? 10.2.7 MySQL 怎样使用内存 10.2.8 ...
NULL 博文链接:https://opq149766320.iteye.com/blog/561173
MySQL NULL 值处理 MySQL 正则表达式 MySQL 事务 MySQL ALTER命令 MySQL 索引 MySQL 临时表 MySQL 复制表 MySQL 元数据 MySQL 序列使用 MySQL 处理重复数据 MySQL 及 SQL 注入 MySQL 导出数据 MySQL 导入数据 MySQL ...
MySQL中的主键和唯一键有什么区别? 主键和唯一键都是用来保证表中数据的唯一性的。主键是一列或一组列,它们的值在表中唯一,并且不能为NULL。在MySQL中,可以使用PRIMARY KEY关键字来定义主键。唯一键也是一列或一...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
为了防止他们重复发消息,插入多条重复记录,所以在表中的几个列上加了个唯一性索引。 CREATE UNIQUE INDEX IDX_UN_LOAN_PLAN_APP ON testTable (A, B, C); 这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 ...
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 升级到其他的...
在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,...
一、 MySQL建表,字段需设置为非空,需设置字段默认值。二、 MySQL建表,字段需...六、 如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。七、 建立索引index(part1,part2,par
mysql允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能。 重复索引是指的在相同的列上按照相同的顺序创建的相同...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,...