`
hongtoushizi
  • 浏览: 378767 次
  • 性别: 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和空时创建唯一索引的方法

    在MySQL数据库中,`NULL` 和 空字符串 (`''`) 是两个不同的概念,它们在创建唯一索引时尤其需要注意。唯一索引的目的是确保索引中的每一行都有唯一的值,不允许有重复。然而,当数据包含 `NULL` 或空字符串时,如果...

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

    本文将深入探讨MySQL中创建、查看和删除索引的相关知识。 一、创建索引 在MySQL中,索引主要分为以下几种类型: 1. 主键索引(Primary Key Index):每个表只能有一个主键,不允许有重复值,且不能为NULL。 2. ...

    MySQL中NULL对索引的影响1

    虽然MySQL可以在含有NULL的列上使用索引,但是NULL和其他数据在索引中的处理方式不同。NULL是一个特殊的值,它 Conceptually means “a missing unknown value” and it is treated somewhat differently from other...

    Mysql数据库索引创建、索引删除、索引失效场景详解

    总之,正确创建和维护索引对于优化MySQL数据库性能至关重要。了解各种索引类型、创建方法和可能导致失效的场景,可以帮助数据库管理员更好地管理和优化他们的数据库,从而提高查询效率和整体系统性能。

    MySQL索引类型大汇总

    在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引类型,没有任何限制。可以通过以下三种方式创建普通索引: * 创建索引:`CREATE INDEX indexName ON mytable(username...

    mysql中创建各种索引的语句整理.docx

    以下是关于在MySQL中创建各种类型索引的详细说明: 1. **主键索引(PRIMARY KEY)**: 主键索引是唯一标识表中每一行记录的字段,不允许有重复值且不能为空。创建主键索引的SQL语句如下: ```sql ALTER TABLE `...

    mysql添加索引.pdf

    在MySQL中,索引是一种非常关键的数据库优化技术,它能极大地提升查询效率,尤其是在处理大量数据和复杂查询时。然而,添加索引并非随意为之,而是需要根据实际需求和性能考虑来明智地选择。 首先,理解索引的作用...

    mysql查询优化之索引优化

    - **NULL值与索引**:对于包含NULL值的列,B-Tree索引可能会降低性能,因为NULL在索引中被视为唯一的值。在设计时,考虑是否允许NULL值或设定默认值。 - **覆盖索引**:如果查询只需要索引中的信息,覆盖索引可以...

    mysql的索引优化

    - 创建表时指定全文索引:`CREATE TABLE 表名 (..., FULLTEXT INDEX [索引名] (列名列表));` - 修改表添加全文索引:`ALTER TABLE 表名 ADD FULLTEXT INDEX [索引名] (列名列表);` #### 五、索引的选择与应用 1....

    MySQL索引 使用笔记

    - 使用覆盖索引(Covering Index),使查询可以从索引中直接获取所需数据,避免回表操作。 以上是对MySQL索引使用的基本概念和实践要点的介绍,实际应用中还需要结合具体业务场景和数据特点进行调整和优化。学习并...

    为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》.doc

    在 MySQL 中, Null 值的存在可能会对数据库的性能和数据的准确性产生影响。在本期中,我们将讨论为什么不建议给 MySQL 设置 Null 值,并分析 Null 值对数据统计的影响。 1. Null 值对统计的影响 在 MySQL 中,...

    MySQL创建全文索引分享

    除了全文索引,MySQL还提供了其他类型的索引,如主键索引(唯一且不允许为空)、普通索引(非唯一)和唯一索引(不允许重复值)。在设计数据库时,应根据查询需求选择合适的索引类型,以达到最佳的查询性能。同时,...

    MySQL中的唯一索引的简单学习教程

    在处理包含NULL值的列时,需要注意唯一索引的规则:单个NULL值不会被视为重复,但两个NULL值在唯一索引中被认为是相等的,因此在含有NULL值的列上创建唯一索引时,应考虑数据的含义和业务逻辑。 此外,当涉及并发...

    mysql数据库以及索引详解.pptx

    - 组合索引中有列值为NULL。 - 在一个SELECT语句中,索引只能使用一次(如在WHERE中使用后,在ORDER BY中不再有效)。 - 在查询条件中使用不等于符号(包括<、>、!=)可能导致索引失效。 通过理解MySQL及其索引的...

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

    总的来说,理解`NULL`值在MySQL索引中的行为是非常重要的,这有助于我们更好地设计数据库和编写高效的查询语句。在实际工作中,应尽可能避免无谓的`NULL`值,尤其是在那些经常用于查询条件的列中,以确保最佳的性能...

    mysql主键和唯一索引的区别(csdn)————程序.pdf

    MySQL数据库中的主键和唯一索引是两种不同的概念,它们在数据表的组织和查询优化中扮演着重要的角色。下面将详细阐述它们的区别和特点。 首先,主键是一种约束,它不仅是一个索引,更是对数据完整性的严格规定。...

    尚硅谷mysql高级:索引、优化

    对于经常变化的列,避免放在索引中。 7. 使用EXPLAIN分析查询:理解查询执行计划,检查是否使用了索引,是否存在全表扫描等问题。 8. 触发器和存储过程:虽然可以简化代码,但过度使用可能降低性能。谨慎使用,...

    mysql索引与视图的实例附答案.docx

    索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;索引需要占用物理空间,每一个索引要占一定的物理空间;增加、删除和修改数据时,需要动态的维护索引,造成数据的维护速度降低了。...

Global site tag (gtag.js) - Google Analytics