#### 触发器
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 表名)