视图
什么是视图
视图是一张虚拟表,比如内连接产生的虚拟表 保存下来,下次可以直接使用,而不是下次再重复写一下内连接
为什么要用视图
如果要频繁使用一张虚拟表,使用视图就不用重复查询
如何使用视图
关键字view 和as create view teacher2course as select * from teacher inner join course on teacher_id = teacher.tid
强调
1. 在硬盘中,视图只有表结构文件,没有表数据文件 2. 视图通常适用于查询,尽量不要修改视图中的数据 3. 一般情况下不会频繁使用视图: 开发过程中如果项目中大量使用到了视图, 那意味着后期想扩张某个功能的时候,恰巧有需要对视图进行修改; 也就意味着需要先在驶入修改,再去SQL语句修改; 也就意味着涉及跨部门沟通。 所以通常不会使用视图,而是通过重新修改SQL语句来扩展功能
触发器
什么是触发器
达到某种条件,自动触发的功能 例如对某张表的增删改时,自动触发SQL代码执行
触发器语法
固定语法结构 create trigger 触发器的名字 after/before insert/update/delete on 表名 for each row begin sql语句 end
触发器语法案例

# 针对插入 create trigger tri_after_insert_t1 after insert on 表名 for each row begin sql代码。。。 end create trigger tri_after_insert_t2 before insert on 表名 for each row begin sql代码。。。 end # 针对删除 create trigger tri_after_delete_t1 after delete on 表名 for each row begin sql代码。。。 end create trigger tri_after_delete_t2 before delete on 表名 for each row begin sql代码。。。 end # 针对修改 create trigger tri_after_update_t1 after update on 表名 for each row begin sql代码。。。 end create trigger tri_after_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') #0代表执行失败 ); CREATE TABLE errlog ( id INT PRIMARY KEY auto_increment, err_cmd CHAR (64), err_time datetime ); delimiter $$ # 将mysql默认的结束符由;换成$$ create trigger tri_after_insert_cmd after insert on cmd for each row begin if NEW.success = 'no' then # 新记录都会被MySQL封装成NEW对象 insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time); end if; end $$ delimiter ; # 结束之后记得再改回来,不然后面结束符就都是$$了 # 往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志 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'); # 查询errlog表记录 select * from errlog; # 删除触发器 drop trigger tri_after_insert_cmd;
事务