10.13 视图
1、什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可
2、为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询
3、如何使用视图
视图记录的增、删、改和表方法相同,但改变视图记录,原始表也跟着改,所以不要修改视图记录,只用于查看
create view teacher2course as #创建视图 select * from teacher inner join course on teacher.tid = course.teacher_id; alter view teacher2course as #修改视图名 select * from teacher inner join course on teacher.tid = course.teacher_id; drop view teacher2course; #删除视图
强调: 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常用于查询,尽量不要修改视图中的数据
10.14 触发器
触发器:在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外一段sql代码
创建触发器语法:
# 针对插入(insert) create trigger tri_after_insert_t1 after insert on 表名 for each row begin sql代码... end create trigger tri_before_insert_t2 before insert on 表名 for each row begin sql代码... end # 针对删除(delete) create trigger tri_after_delete_t1 after delete on 表名 for each row begin sql代码... end create trigger tri_before_delete_t2 before delete on 表名 for each row begin sql代码... end # 针对修改(update) create trigger tri_after_update_t1 after update on 表名 for each row begin sql代码... end create trigger tri_before_update_t2 before update on 表名 for each row begin sql代码... end
举例:
CREATE TABLE cmd ( id INT PRIMARY KEY auto_increment, USER CHAR (32), priv CHAR (10), cmd CHAR (64), sub_time datetime, #提交时间 success enum ('yes', 'no') ); CREATE TABLE errlog ( id INT PRIMARY KEY auto_increment, err_cmd CHAR (64), err_time datetime); delimiter $$ create trigger tri_after_insert_cmd after insert on cmd for each row begin if NEW.success = 'no' then #等值判断只有一个等号 insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time); end if; end $$ delimiter ; insert into cmd (USER,priv,cmd,sub_time,success) values ('egon','0755','ls -l /etc',NOW(),'yes'), ('egon','0755','cat /etc/passwd',NOW(),'no'), ('egon','0755','useradd xxx',NOW(),'no'), ('egon','0755','ps aux',NOW(),'yes'); mysql> select * from errlog; #查询错误日志,发现有两条 +----+-----------------+---------------------+ | id | err_cmd | err_time | +----+-----------------+---------------------+ | 1 | cat /etc/passwd | 2017-09-14 22:18:48 | | 2 | useradd xxx | 2017-09-14 22:18:48 | +----+-----------------+---------------------+