MySQL进阶篇3 -- 视图、存储过程、触发器
四、视图、存储过程、触发器
4.1 视图
-
创建
-- 创建视图 create or replace view v_emp as select id, name from employee;
-
查询
-- 查看视图的创建语句 show create view v_emp; -- 查询视图 select * from v_emp;select * from v_emp where id = 1;
-
修改
-- 修改视图 create or replace view v_emp as select id, name, age from employee;alter view v_emp as select id, name from employee;
-
删除
-- 删除视图 drop view v_emp;
-
视图的检查选项
当使用
WITH CHECK OPTION
子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。MySQL也允许
基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,MySQL提供了两个选项:CASCADED 和 LOCAL,默认为:CASCADED
。
LOCAL:当在操作视图时,会递归的去找当前视图所依赖的视图,如果当前视图以及依赖的视图定义了有
WITH CHECK OPTION
这样的检查选项,那么将会去判定我们所操作的数据,是否满足视图的条件,如在递归的过程中找到某个视图没有定义 检查选项 ,那么则不会做检查。
- 视图的更新
- 视图的作用
视图的案例
4.2 存储过程
-
介绍
-
特点
-
创建
-
调用
-
查看
- ‘xxx’ 指
具体的表名
- ‘xxx’ 指
-
删除
在命令行中,执行创建存储过程的SQL时,需要通过关键字
delimiter
指定SQL语句的结束符,否则会报错。
-
变量
-
系统变量
select @@session.autocommit;
-
用户自定义变量
-
局部变量
-
if
-
参数
-
case
-
while
-
repeat
-
loop
-- 创建一个存储过程,名为 test3,接受一个整数参数n create procedure test3(in n int) begin-- 声明一个变量res,用于存储结果,默认值为0declare res int default 0;-- 定义一个名为sum的循环sum:loop-- 如果n大于0,则执行以下代码if (n > 0) then-- 将n加到res上,并将结果赋值给resset res := res + n;-- 将n减1,以便在下一次循环中使用set n := n - 1;else-- 如果n不大于0,则退出循环leave sum;end if;end loop sum;-- 输出最终的res值select res; end;-- 调用test3存储过程,并传入参数10 call test3(10);
-- iterate 的使用 create procedure test4(in n int) begindeclare res int default 0;sum_even:loopif n = 0 thenleave sum_even;end if;if n % 2 = 1 thenset n := n - 1;iterate sum_even;end if;set n := n - 1;set res := res + n;select res;end loop sum_even; end;call test4(10);
cursor
条件处理程序
declare cur cursor for select id from employee; declare exit handler for not found close cur;
-
4.3 存储函数
4.4 触发器
介绍
当我们执行了一条
update
语句时,该语句影响了五行
行级触发器
:会被触发五次
语句级触发器
:不管影响了多少行,都只触发一次
- 语法