触发器、视图和索引

#### 触发器

Trigger:当一件事情发生以后会触发另一件事件发生,我们称之为触发器;

在mysql中:我们对一张表操作时会引起另一张表的改变;

语法:

​ delimiter \\\ (改变结束标志)

​ create trigger 名字 时间(after|before) 动作(insert|update|delete) on 表1

​ for each row

​ begin

​ sql语句 表2;

​ end \ \\

delimiter;

两个变量:

New:表一修改后的那一行内容;

Old:表一修改前的那一行内容。

删除:drop trigger 触发器名字;

#### 视图

如果有一张表包含员工的所有信息,很多信息我们并不希望所有都看到,我们可以创建多张表,但维护起来麻烦,我们可以使用视图来完成。

视图是一张虚拟的表,从基本表的一部分组成的一个虚拟表。

虽然是一张虚拟的表,但是我们可以当普通表使用。

语法:create view 视图名 as select 语句;

在视图里修改数据时,基本表也会进行相应的修改;

在视图里插入数据时,基本表也可以插入相应的数据,但不是所有的都能成功(不满足视图的条件时,加上with check option 时,不满足条件会直接报错)。

不能修改视图的情况:

1.使用了聚合函数;

2.视图中不能使用活用户变量;

3.在存储过程中不能修改视图;

4.在临时表中不能创建视图;

5.在视图中可以创建视图;

6.多表连接查询,除非视图和两张表里所有的列一 一对应,那么就不能修改视图。

#### 索引(Index)

索引里是有真实数据的,索引对这些数据进行排序,对有索引的数据进行查找查找时先进入索引进行查找,而不是直接在表中查找,因为已经进行排序(默认是平衡二叉树(BT)),所以查找速度加快,在多表查询时可以消除笛卡尔积。

缺点:1.插入的速度慢。

​ 2.会占用硬盘空间,有时会比数据更大。

索引相当于指针,指向表中的相关数据。

Explain:我们称之为优化器,可以让我们来分析将要执行的select语句;

**索引的类型:**
1.普通索引,没有任何限制;

2.唯一性索引;

3.主键索引;

4.多列索引:创建一个索引,这个索引有多列 xx index(字段1,字段2),

先用字段1排序,如果排不好的话在使用字段2进行排序。

​ *覆盖索引(innode):索引的列已经包含将要查找的列。

**语法:**

添加:

1.创建表时添加:
create table (

​ 列 类型,

​ 【unique|primary|fulltext】 index 索引名 (列)

);

2.创建表以后添加:

alter table 表名 add index 索引名(列);

3.careate 索引类型 索引名 on 表 (字段)

(如果不指定索引名,默认索引名为列名)

查看:show indexs from 表名;

删除:alter table 表名 drop index 索引名;

禁用:alter table 表名 disable keys;

开启:alter table 表名 enable keys;

(表分析: analyaze table 表名)

posted @ 2021-03-04 21:26  素色学习  阅读(112)  评论(0编辑  收藏  举报