博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL数据库学习----索引和触发器
阅读量:5219 次
发布时间:2019-06-14

本文共 2037 字,大约阅读时间需要 6 分钟。

一:索引

索引是创建在数据库表上,其作用是提高对表中数据的查询速度。

假设数据库中有一张1000条记录的表格,如果没有创建索引的话,用户想通过查询条件查询,实际上是把整个数据库中1000条记录都读取一遍,满足查询条件的就加入结果集中,这样效率很低,如果表中创建了针对查询条件字段的索引,查询的时候会立即找到满足条件的记录加入结果集,不需要遍历过程,这样大大提高了数据库查询效率。

创建索引虽然提高了数据库表格的查询效率,但是也增加了数据库维护速度,因为索引需要占用物理空间,其次每次用户插入,更改,删除记录的时候都要同步操作索引,这样就造成数据维护速度降低,所以使用索引需要综合考虑索引的优点和缺点。

使用索引的几个建议

1.对经常作为查询条件的字段使用索引

2.如果需要用到索引尽量在整型字段上面使用索引

3.尽量使用唯一性的字段来创建索引

4.限制索引的数目,因为索引是占用物理空间的,并且数据更新需要同步操作索引,所以在索引的数量上面需要综合考虑

5.删除不再使用或者很少使用的索引

6.用户也可以在插入,更改,删除记录的时候先删除掉索引,在操作数据库,然后增加索引来使用

创建索引有几种方法:

1.创建表格的时候创建索引

 

创建普通索引

INDEX(字段名);

任意字段都可以

 

创建唯一索引

UNIQUE INDEX 索引名称(字段名);

唯一性字段可以,比如主键就是唯一字段或者约束属性是unique的字段

 

创建全文索引

FULLTEXT INDEX 索引名称(字段名);

CHAR、VARCHAR、TEXT类型字段上面可以

 

创建单列索引

INDEX 索引名称(字段名(限制长度));

对于字符型数据不同判断全部字符,只需要判断前面限制长度的字符就型了,目的还是提高查询速度

 

创建多列索引

INDEX 索引名称(字段名1, 字段名2...);

只有查询条件中使用了第一个字段名才会生效

比如创建多列索引:INDEX INDEX_TABLE(username, password, time);

这里创建了三个字段的索引,实际上MYSQL创建了三个索引分别是username,password。username,time。username,password,time。这样就能很清楚看到如果查询条件中使用WHERE PASSWORD="" AND TIME=""这种的话,是不会用到这个索引的,查询条件中没有索引第一个字段USERNAME。

 

创建空间索引

这个很少用到,这里就暂时不说。。

 

2.在已有的表格中创建索引 

CREATE [UNIQUE/FULLTEXT/SPATIAL] INDEX 索引名 ON 表名 (字段名(限制长度));

 

3.用ALTER TABLE语句来创建索引 

ALTER TABLE 表名 ADD [UNIQUE/FULLTEXT/SPATIAL] INDEX 索引名 (字段名(限制长度));

 

删除索引:

DROP INDEX 索引名 ON 表名;

 

二:触发器

触发器,顾名思义就是通过某个特定的事件来触发另外一个事件,我们把”通过某个特定的事件“称为触发条件,这个条件有INSERT,UPDATE,DELETE,最终触发另外一个事件就是我们具体要数据库操作的步骤了,试下下如果有两张表,表A中记录学生和对应年龄的数据,表B中记录学生和体重的数据,现在有个学生退学了,那么我们要把表A中这个学生的记录删除掉,表B中这个学生的记录也要同时删除,这样就起到一个数据同步的作用,这里用触发器的话,就是当表A中该学生记录被DELETE掉,触发事件来DELETE掉表B中该学生的记录,所以触发器在实际运用中还是有存在的意义的。

注意:触发条件和触发事件不能作用于同一张表中!

创建一个一条执行语句的触发器:

CREATE TRIGGER 触发器名 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 表名 FOR EACH ROW 执行语句;

创建一个多条执行语句的触发器:

CREATE TRIGGER 触发器名 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 表名 FOR EACH ROW BEGIN 执行语句列表 END;

[BEFORE/AFTER]:    说明是在触发之前就执行语句还是触发之后执行。

[INSERT/UPDATE/DELETE]:    说明触发条件是INSERT或UPDATE或DELETE。

执行语句列表:    以”;“号分开的执行语句,但是MYSQL默认是以”;“号来做结束的,所以可以用”DELIMITER &&“把数据库结束符换成&&,等触发器创建完后在改回”;“。

查看触发器:

SHOW TRIGGERS;

 

删除触发器:

DROP TRIGGER 触发器名;

转载于:https://www.cnblogs.com/roddy/p/4793364.html

你可能感兴趣的文章
20165224 陆艺杰 《Java程序设计》课程总结
查看>>
前端面试手册
查看>>
CodeForces7D 字符串hash + dp
查看>>
Python学习(一)
查看>>
关于Matchvs一些使用心得与建议
查看>>
Gson获取json串中的key-value
查看>>
创建spring boot项目
查看>>
Behave + Selenium(Python) 四
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
有序链表的归并 分类: 链表 2015-06-...
查看>>
A Plug for UNIX 分类: POJ ...
查看>>
寒假作业01
查看>>
自定义simple_tag
查看>>
ubuntu配置全局环境变量后开新shell变量无效的解决方法
查看>>
表格只要外面的边框,不要里面的横线
查看>>
文件名&关键字&标识符、变量声明、流程控制语句
查看>>
第二章002 定位元素
查看>>
MyBatis缓存
查看>>
STL 练习
查看>>