### --- 什么是索引 ——> 在数据库表中,对字段建立索引可以大大提高查询速度。通过善用这些索引, ——> 可以令MySQL的查询和运行更加高效。 ——> 如果合理的设计且使用索引的MySQL是一辆兰博基尼的话, ——> 那么没有设计和使用索引的MySQL就是一个人力三轮车。 ——> 拿汉语字典的目录页(索引)打比方, ——> 我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字 ——> MySql将一个表的索引都保存在同一个索引文件中, 如果对中数据进行增删改操作, ——> MySql都会自动的更新索引二、常见索引分类
索引名称 | 说明 |
主键索引 (primarykey) | 主键是一种唯一性索引,每个表只能有一个主键, 用于标识数据表中的每一条记录 |
唯一索引 (unique) | 唯一索引指的是 索引列的所有值都只能出现一次, 必须唯一. |
普通索引 (index) | 最常见的索引,作用就是 加快对数据的访问速度 |
### --- 主键索引 (PRIMARY KEY) ——> 特点: 主键是一种唯一性索引,每个表只能有一个主键,用于标识数据表中的某一条记录。 ——> 一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。
### --- 创建db4数据库 CREATE DATABASE db4 CHARACTER SET utf8;
### --- 创建 demo01表 CREATE TABLE demo01( did INT, dname VARCHAR(20), hobby VARCHAR(30) );
### --- 语法格式 ——> 创建表的时候直接添加主键索引 (最常用) CREATE TABLE 表名( -- 添加主键 (主键是唯一性索引,不能为null,不能重复,) 字段名 类型 PRIMARY KEY, );
——> 修改表结构 添加主键索引 ALTER TABLE 表名 ADD PRIMARY KEY ( 列名 )
### --- 为demo1 表添加主键索引 ALTER TABLE demo01 ADD PRIMARY KEY (did);
### --- 唯一索引 ——> 特点: 索引列的所有值都只能出现一次, 必须唯一. ——> 唯一索引可以保证数据记录的唯一性。事实上,在许多场合, ——> 人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
### --- 语法格式 ——> 创建表的时候直接添加主键索引 CREATE TABLE 表名( 列名 类型(长度), -- 添加唯一索引 UNIQUE [索引名称] (列名) ); ——> 使用create语句创建: 在已有的表上创建索引 create unique index 索引名 on 表名(列名(长度)) ——> 修改表结构添加索引 ALTER TABLE 表名 ADD UNIQUE ( 列名 )
### --- 为 hobby字段添加唯一索引 create unique index ind_hobby on demo01(hobby)
### --- 向表中插入数据 INSERT INTO demo01 VALUES(1,'张三','DBJ'); ——> 报错Duplicate entry 'DBJ' for key 'hobby' ——> 唯一索引保证了数据的唯一性,索引的效率也提升了 INSERT INTO demo01 VALUES(2,'李四','DBJ');四、普通索引 (INDEX)
### --- 普通索引 ——> 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。 ——> 因此,应该只为那些最经常出现在查询条件(WHERE column=) ——> 或排序条件(ORDERBY column)中的数据列创建索引。
### --- 语法格式 ——> 使用create index 语句创建: 在已有的表上创建索引 create index 索引名 on 表名(列名[长度]) ——> 修改表结构添加索引 ALTER TABLE 表名 ADD INDEX 索引名 (列名)
### --- 给 dname字段添加索引 ~~~ # 给dname字段添加索引 alter table demo01 add index dname_indx(dname);
### --- 删除索引 ——> 由于索引会占用一定的磁盘空间,因此,为了避免影响数据库的性能, ——> 应该及时删除不再使用的索引
### --- 语法格式 ALTER TABLE table_name DROP INDEX index_name;
### --- 删除 demo01 表中名为 dname_indx 的普通索引。 ALTER TABLE demo01 DROP INDEX dname_indx;六、sql语句
### --- sql语句 ~~~ # 创建db4数据库 CREATE DATABASE db4 CHARACTER SET utf8;
~~~ # 创建demo01表 CREATE TABLE demo01( did INT, dname VARCHAR(20), hobby VARCHAR(30) );
~~~ # 为demo01表添加主键索引 ALTER TABLE demo01 ADD PRIMARY KEY (did); ~~~ # 为 hobby字段添加唯一索引 CREATE UNIQUE INDEX ind_hobby ON demo01(hobby)
~~~ # 向表中插入数据 INSERT INTO demo01 VALUES(1,'张三','DBJ'); ~~~ # 报错Duplicate entry 'DBJ' for key 'hobby' ~~~ # 唯一索引保证了数据的唯一性,索引的效率也提升了 INSERT INTO demo01 VALUES(2,'李四','DBJ');
~~~ # 给demo字段添加索引 ALTER TABLE demo01 ADD INDEX dname_indx(dname); ~~~ # 删除 demo01 表中名为 dname_indx 的普通索引。 ALTER TABLE demo01 DROP INDEX dname_indx;
### --- 索引 /* 索引概念 我们可以通过对数据表中的字段创建索引 来提高查询速度 常见的索引的分类 主键索引 (primary key) 主键是一个唯一性的索引 每个表中只能有一个主键 唯一索引 (unique) 索引列的所有数据只能出现一次,必须是唯一 普通索引 (index) 最常见的索引 作用就是提高对数据的访问速度 表对应的索引被保存在一个索引文件中, 如果对数据进行增删改操作,那么mysql就需要对索引进行更新 */
/* 主键索引的创建 1.创建表的时候 直接添加主键 2.创建表之后 添加索引 使用 DDL */ -- 为demo01表添加 主键索引 ALTER TABLE demo01 ADD PRIMARY KEY (did);
/* 唯一索引的创建 create unique index 索引名 on 表名(列名(长度)) */ -- 为demo01表的 hobby字段添加唯一索引 CREATE UNIQUE INDEX ind_hobby ON demo01(hobby); -- 添加唯一索引的列,列的所有值都只能出现一次 INSERT INTO demo01 VALUES(1,'tom','篮球'); -- Duplicate entry '篮球' for key 'ind_hobby' -- 唯一索引保证了数据的唯一性, 同时也提升了查询效率 INSERT INTO demo01 VALUES(2,'jack','篮球');
/* 普通索引的创建 1.create index 索引名 on 表名(列名[长度]) 2.ALTER TABLE 表名 ADD INDEX 索引名 (列名) */ -- 为 demo01表中的 dname字段添加普通索引 ALTER TABLE demo01 ADD INDEX ind_dname(dname);
/* 删除索引 ALTER TABLE 表名 DROP INDEX 索引名; */ -- 删除dname字段上的索引 ALTER TABLE demo01 DROP INDEX ind_dname;