MySQL索引入门 普通索引 唯一索引
文章目录
- 使用索引
- 创建索引
- 删除索引
- 显示索引信息
- 普通索引
- 唯一索引
- unique与primary key的区别
- 全文索引
- 组合索引
参考
使用索引
创建索引
创建索引有3种方式
- 在创建表时指定索引;
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
- 修改表结构时添加索引;
ALTER table tableName ADD INDEX indexName(columnName)
- 在已有的表上添加索引;
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索引入门 普通索引 唯一索引相关推荐
- mysql 唯一索引和复合索引 区别_MySQL复合唯一索引分析
MySQL复合唯一索引分析 关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:"这种索引起到的关键作用是约束,查询时性能上没有得到提高或者查询时根本没 ...
- mysql 线上加索引_mysql手札,唯一索引引发的线上事故
昨天把一个数据表的字段从普通索引,修改成为了唯一索引.准备早早下班的时候,突然发现数据库的内存命中率从98%下降到了48%,导致大量的任务处于阻塞状态,整个系统也阻塞了. 其实这个就是普通索引和唯一索 ...
- mysql唯一索引弊端_MySQL 关于唯一索引和普通索引的抉择
想象这样一个场景,在设计一张用户表时,每人的身份证号是唯一的,需要搜索.但由于身份证号字段较大,不好将其作为主键.在业务代码已经保证插入身份证唯一的情况下,可以选择建立唯一索引和普通普通索引,这时该如 ...
- mysql插入记录时违反唯一索引的处理
如果表中定义了唯一索引,而我们插入记录要避免违反这个约束,该怎么弄? 最原始的办法,是先查找一下,确认不违反,才插入.现在都用ORM框架来操作数据库,搞不好还要分成两个步骤,调用2个方法才能完成.或者 ...
- mysql唯一索引什么意思_MySQL唯一索引什么意思
如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引. Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某 ...
- mysql 建表时创建唯一索引
Mysql建表与索引使用规范整理 一,设计表规范: MySQL建表,字段需设置为非空,需设置字段默认值: MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL: MySQL建表,如果 ...
- mysql删除表中的唯一索引吗_Mysql 使用sql删除同表中重复数据并加唯一索引
同一张表中,假设以两个字段做唯一业务,这两个字段分别为key1,key2, 则以这两个字段为唯一 DELETE tablename FROM tablename , ( SELECT min(id) ...
- <MySQL>何时使用普通索引,何时使用唯一索引
如果能够保证业务代码不会写入重复数据,就可以继续往下看. 如果业务不能保证,那么必须创建唯一索引. 关于查询能力 普通索引和唯一索引在查询能力上是没有很大差别的. 如:select id from T ...
- access建立两个字段唯一索引_关于MongoDB唯一索引(Unique)的那些事
写在前面 关于什么是索引以及唯一索引这里就不做说明了,不清楚的可以自行谷歌或者百度.是什么引起我写这篇文章呢,这来自于之前项目中的一个问题. 我们用的是MongoDB数据存储用户信息,用户表中曾经用户 ...
- oracle分区唯一索引,关于分区表与唯一索引的测试记录
关于分区表与唯一索引的测试记录 SQL> connect eygle/eygle Connected. SQL> CREATE TABLE docinfo( 2 docid NUM ...
最新文章
- c语言中的if语句_If ... C中的其他语句解释
- 【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )
- ubuntu10右键脚本中增加发送到命令
- 再看产业地图及《中国2010-2011产业地图》书评
- usb设备的probe全过程
- 记一次失败的电话面试
- STL vector使用方法介绍
- vba中find用法
- 做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法
- ALFA机器视觉深度学习外观缺陷检测系统软件机器视觉
- Java开发人员2021年的职位描述和职责
- size_t和size_type
- bugkuCTF—杂项—旋转跳跃
- 传播小知识:timeout限制时间命令
- 手机网页通过js打开app
- SwitchyOmega_Chromium插件的下载安装以及使用
- zipkin+elk微服务日志收集分析系统
- java peek函数_java (String) s.peek()是什么意思?
- mysql一张表100亿条数据_一个表有100亿条记录,如何优化
- 百新谷PCB在线下单+ERP智能生产管理系统--陪跑篇
热门文章
- 求立方根_12.初中数学:立方根号a,等于0.1738,怎么求a的值?期末考试真题
- vc mysql ado blob_在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。...
- mysql之join_mysql学习之join用法
- 马尔科夫决策过程(MDP) : BlackJack (MC-On Policy)
- 阿里云云计算 17 块存储的分类
- 2021-09-10 Bagging[7](并 行)和Boosting[8](串行)是两种常见的集成学习方法
- 307.区域和检索-数组可修改
- 212.单词搜索II
- 编程计算二叉树的深度
- 开发机器学习应用程序的步骤