视图
简介
实质
视图是已经编译好的sql语句,没有实际的物理记录,视图也是表,虚拟表。
分类
①MERGE:将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行,当引用视图时,引用视图的语句与定义视图的语句合并,在一些情况下可以通过视图对基表数据进行更新、删除操作,视图不可更新情况有如下几点:
- 字段来自表达自或常数,不能insert和update,但可以delete
- 字段来自集函数
- 视图含有group by或者distinct
- 视图含嵌套查询,同时内层查询语句与外层查询语句使用同样的基表,如select * from stu where age in (select age from stu);
②TEMPTABLE:将视图的结果集存放在临时表中,每次执行时从临时表中操作,当引用视图时,根据视图的创建语句建立一个临时表(这个过程会影响效率),不可通过视图对基表数据进行更新、删除操作,每次查询时会根据生成的临时表再进行一次全表查询(这里的表指生成的临时表)
优点
①简化业务查询语句
②通过对外提供视图,从而隐藏基表,进行权限控制
③分表查询
操作命令
创建视图
格式:create [algorithm=算法] view v_name as select 语句
algorithm = merge/temptable/undifined
删除视图
格式:drop view v_name;
修改视图
格式:alter view v_name as select 语句;
触发器
简介
实质
监视某个表的触发条件操作(Insert、Update、Delete等),控制控制某段代码的触发
触发器四要素
①监视地点:table
②监听事件:insert/update/delete
③触发时间:after/before
④触发事件:insert/update/delete
操作命令
创建触发器
格式:create trigger tg_name after/before insert/update/delete on table
for each row ####这句话在MySQL中是固定的
begin
sql语句;
end$
注意:新插入的行用new来表示,行中的每一列的值用“new.列名”
删除触发器
格式:drop trigger tg_name;