触发器
触发器是一种特殊的存储过程,发生DML操作时自动执行的操作,例如日志的记录:
添加、查看与删除
语法:
create trigger + 触发器名
< before | after> 定义触发时机
<insert | delete | update> 定义DML操作类型
on <tb_name>
for each row//声明为行级操作,影响一行则触发一次
begin
-- sql语句如果只有一句则可以不写begin和end
end;
例子:
create trigger tri_text
after insert on students
for each row//行级操作
insert into stulogs(time,log_text) value(now(),concat('添加',NEW.stu_num,'学生信息'));
show triggers;//查看触发器
drop trigger +触发器名;//删除触发器
NEW
update、insert中NEW表示更新、插入后的数据
OLD
update、delete中OLD表示更新、删除前的数据
触发器使用总结
优点
- 触发器是⾃动执⾏的,当对触发器相关的表执⾏响应的DML操作时⽴即执⾏;
- 触发器可以实现表中的数据的级联操作(关联操作),有利于保证数据的完整性;
- 触发器可以对DML操作的数据进⾏更为复杂的合法性校验
缺点
- 使⽤触发器实现的业务逻辑如果出现问题将难以定位,后期维护困难;
- ⼤量使⽤触发器容易导致代码结构杂乱,增加了程序的复杂性;
- 当触发器操作的数据量⽐较⼤时,执⾏效率会⼤⼤降低。
建议
- 在互联⽹项⽬中,应避免适应触发器;
- 对于并发量不⼤的项⽬可以选择使⽤存储过程,但是在互联⽹引⽤中不提倡使⽤存储过
程(原因:存储过程时将实现业务的逻辑交给数据库处理,⼀则增减了数据库的负载,
⼆则不利于数据库的迁移)
视图
视图的概念
视图,就是 由数据库中⼀张表或者多张表根据特定的条件查询出得数据构造成得 虚拟表
视图的作用
- 安全性:如果我们直接将数据表授权给⽤户操作,那么⽤户可以CRUD数据表中所有数
据,加⼊我们想要对数据表中的部分数据进⾏保护,可以将公开的数据⽣成视图,授权
⽤户访问视图;⽤户通过查询视图可以获取数据表中公开的数据,从⽽达到将数据表中
的部分数据对⽤户隐藏。 - 简单性:如果我们需要查询的数据来源于多张数据表,可以使⽤多表连接查询来实现;
我们通过视图将这些连表查询的结果对⽤户开放,⽤户则可以直接通过查询视图获取多
表数据,操作更便捷。
创建视图
语法:
create view <view_name>
AS
select查询语句
视图数据特性
查询操作:如果在数据表中添加了新的数据,⽽且这个数据满⾜创建视图时查询语句的条
件,通过查询视图也可以查询出新增的数据;当删除原表中满⾜查询条件的数据时,也会从
视图中删除。
新增数据:如果在视图中添加数据,数据会被添加到原数据表
删除数据:如果从视图删除数据,数据也将从原表中删除
修改操作:如果通过修改数据,则也将修改原数据表中的数据
视图的使⽤建议 : 对复杂查询简化操作,并且不会对数据进⾏修改的情况下可以使⽤视图。
查询视图结构
desc + 视图名;
修改视图
方式一:
create or replace view + 视图名 AS + 搜索语句;
方式二:
alter view + 视图名 AS + 搜索语句;
删除视图
drop view + 视图名;
不同于删除视图数据,删除整个视图时,不会删除表中数据。