文章目录

  • 使用索引
    • 创建索引
    • 删除索引
    • 显示索引信息
  • 普通索引
  • 唯一索引
    • unique与primary key的区别
  • 全文索引
  • 组合索引

参考

使用索引

创建索引

创建索引有3种方式

  1. 在创建表时指定索引;
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
  1. 修改表结构时添加索引;
ALTER table tableName ADD INDEX indexName(columnName)
  1. 在已有的表上添加索引;
CREATE INDEX indexName ON table_name (column_name)

删除索引

直接删除索引

DROP INDEX [indexName] ON tablename;

在修改表结构时删除索引

ALTER TABLE table_name DROP INDEX index_name;

显示索引信息

SHOW INDEX FROM table_name;

普通索引

仅加速查询,没有任何限制,用的最多;

CREATE INDEX  index_name  on table_name(columnName)  ;
创建索引
mysql> CREATE INDEX index_test on test_user(id);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0正常操作即可
select * from test_user where id = 2;
#注意,这里是columnname不是index_name;

唯一索引

CREATE UNIQUE INDEX index_name  on table_name(columnname)  ;
mysql> select * from test_user ;
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
|  1 | zhangsan |   16 |      1 |
|  2 | zhangsan |   18 |      1 |
|  3 | lisi     |   22 |      2 |
+----+----------+------+--------+
3 rows in set (0.00 sec)mysql> CREATE UNIQUE INDEX uniqueindex_name  on test_user(name);
ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'uniqueindex_name'mysql> CREATE UNIQUE INDEX uniqueindex_age  on test_user(age);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

可以看到,唯一索引的column必须是唯一的,name属性重复就不能作为唯一索引;

mysql> select * from test_user ;
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
|  3 | lisi     |   22 |      2 |
|  5 | zhangsan |   24 |      2 |
+----+----------+------+--------+mysql> CREATE UNIQUE INDEX uniqueindex_name on test_user(name);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0#插入重复的数据时报错;
mysql> insert into test_user(name,age,gender) values("zhangsan",22,2);
ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'uniqueindex_name'mysql> insert into test_user(name,age,gender) values("wangwu",22,2);
Query OK, 1 row affected (0.01 sec)#插入重复的数据时报错,再插入数据时,id直接从5变为7;
mysql> select * from test_user ;
+----+-----------+------+--------+
| id | name      | age  | gender |
+----+-----------+------+--------+
|  3 | lisi      |   22 |      2 |
|  5 | zhangsan  |   24 |      2 |
|  7 | wangwu    |   22 |      2 |
+----+-----------+------+--------+

unique除了在插入重复数据的时候会报错,还会使auto_increment自动增长;

unique与primary key的区别

简单的讲,primary key=unique+not null

一个表最多只有一个主键,但可以有很多唯一键;


全文索引

全文索引(fulltext)仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。

组合索引

将几个列作为一条索引进行检索,使用最左匹配原则。

MySQL索引入门 普通索引 唯一索引相关推荐

  1. mysql 唯一索引和复合索引 区别_MySQL复合唯一索引分析

    MySQL复合唯一索引分析 关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:"这种索引起到的关键作用是约束,查询时性能上没有得到提高或者查询时根本没 ...

  2. mysql 线上加索引_mysql手札,唯一索引引发的线上事故

    昨天把一个数据表的字段从普通索引,修改成为了唯一索引.准备早早下班的时候,突然发现数据库的内存命中率从98%下降到了48%,导致大量的任务处于阻塞状态,整个系统也阻塞了. 其实这个就是普通索引和唯一索 ...

  3. mysql唯一索引弊端_MySQL 关于唯一索引和普通索引的抉择

    想象这样一个场景,在设计一张用户表时,每人的身份证号是唯一的,需要搜索.但由于身份证号字段较大,不好将其作为主键.在业务代码已经保证插入身份证唯一的情况下,可以选择建立唯一索引和普通普通索引,这时该如 ...

  4. mysql插入记录时违反唯一索引的处理

    如果表中定义了唯一索引,而我们插入记录要避免违反这个约束,该怎么弄? 最原始的办法,是先查找一下,确认不违反,才插入.现在都用ORM框架来操作数据库,搞不好还要分成两个步骤,调用2个方法才能完成.或者 ...

  5. mysql唯一索引什么意思_MySQL唯一索引什么意思

    如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引. Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某 ...

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

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

  7. mysql删除表中的唯一索引吗_Mysql 使用sql删除同表中重复数据并加唯一索引

    同一张表中,假设以两个字段做唯一业务,这两个字段分别为key1,key2, 则以这两个字段为唯一 DELETE tablename FROM tablename , ( SELECT min(id) ...

  8. <MySQL>何时使用普通索引,何时使用唯一索引

    如果能够保证业务代码不会写入重复数据,就可以继续往下看. 如果业务不能保证,那么必须创建唯一索引. 关于查询能力 普通索引和唯一索引在查询能力上是没有很大差别的. 如:select id from T ...

  9. access建立两个字段唯一索引_关于MongoDB唯一索引(Unique)的那些事

    写在前面 关于什么是索引以及唯一索引这里就不做说明了,不清楚的可以自行谷歌或者百度.是什么引起我写这篇文章呢,这来自于之前项目中的一个问题. 我们用的是MongoDB数据存储用户信息,用户表中曾经用户 ...

  10. oracle分区唯一索引,关于分区表与唯一索引的测试记录

    关于分区表与唯一索引的测试记录 SQL> connect eygle/eygle Connected. SQL> CREATE TABLE docinfo( 2  docid    NUM ...

最新文章

  1. c语言中的if语句_If ... C中的其他语句解释
  2. 【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )
  3. ubuntu10右键脚本中增加发送到命令
  4. 再看产业地图及《中国2010-2011产业地图》书评
  5. usb设备的probe全过程
  6. 记一次失败的电话面试
  7. STL vector使用方法介绍
  8. vba中find用法
  9. 做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法
  10. ALFA机器视觉深度学习外观缺陷检测系统软件机器视觉
  11. Java开发人员2021年的职位描述和职责
  12. size_t和size_type
  13. bugkuCTF—杂项—旋转跳跃
  14. 传播小知识:timeout限制时间命令
  15. 手机网页通过js打开app
  16. SwitchyOmega_Chromium插件的下载安装以及使用
  17. zipkin+elk微服务日志收集分析系统
  18. java peek函数_java (String) s.peek()是什么意思?
  19. mysql一张表100亿条数据_一个表有100亿条记录,如何优化
  20. 百新谷PCB在线下单+ERP智能生产管理系统--陪跑篇

热门文章

  1. 求立方根_12.初中数学:立方根号a,等于0.1738,怎么求a的值?期末考试真题
  2. vc mysql ado blob_在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。...
  3. mysql之join_mysql学习之join用法
  4. 马尔科夫决策过程(MDP) : BlackJack (MC-On Policy)
  5. 阿里云云计算 17 块存储的分类
  6. 2021-09-10 Bagging[7](并 行)和Boosting[8](串行)是两种常见的集成学习方法
  7. 307.区域和检索-数组可修改
  8. 212.单词搜索II
  9. 编程计算二叉树的深度
  10. 开发机器学习应用程序的步骤