视图、触发器、事务、存储过程、函数与流程控制
一.视图
1.1什么是视图?
视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 (真实存在的两种表合成了一张虚拟表)
1.2为什么要用视图?
如果要频繁使用一张虚拟表,可以不用重复查询
1.3如何用视图
create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常是用于查询,尽量不要修改视图中的数据 #注意 硬盘里面放的是真实表 内存里面放的是虚拟表 drop view teacher2course;#删除视图 结论:视图是综合得到的结果所以不要轻易改,只用来查询
二.触发器
2.1什么是触发器
在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器
2.2为何要用触发器
触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行
就会触发触发器的执行,即自动运行另外一段sql代码
2.3创建触发器语法
# 针对插入 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 04 案例 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 $$ 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 ; drop trigger tri_after_insert_cmd;
三.事务
3.1什么是事务
在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器
3.2事务的作用
3.3如何用
# 针对插入 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 04 案例 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 $$ 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 ; drop trigger tri_after_insert_cmd;
原子性:一个事务内所有的sql操作是一个整体。都执行成功才算整个事务成功。如果某个失败,则必须要会退到事务执行之前的状态,执行成功的sql需要被撤销。
四.存储过程
4.1什么是存储过程
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql
4.2三种开发模型
1、 应用程序:只需要开发应用程序的逻辑 mysql:编写好存储过程,以供应用程序调用 优点:开发效率,执行效率都高 缺点:考虑到人为因素、跨部门沟通等问题,会导致扩展性差 2、 应用程序:除了开发应用程序的逻辑,还需要编写原生sql mysql: 优点:比方式1,扩展性高(非技术性的) 缺点: 1、开发效率,执行效率都不如方式1 2、编写原生sql太过于复杂,而且需要考虑到sql语句的优化问题 3、 应用程序:开发应用程序的逻辑,不需要编写原生sql,基于别人编写好的框架来处理数据,ORM mysql: 优点:不用再编写纯生sql,这意味着开发效率比方式2高,同时兼容方式2扩展性高的好处 缺点:执行效率连方式2都比不过
4.3事务的使用
pass
五.函数与流程控制
pass

浙公网安备 33010602011771号