四、视图、存储过程、触发器
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,用于存储结果,默认值为0 declare res int default 0; -- 定义一个名为sum的循环 sum:loop -- 如果n大于0,则执行以下代码 if (n > 0) then -- 将n加到res上,并将结果赋值给res set 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) begin declare res int default 0; sum_even: loop if n = 0 then leave sum_even; end if; if n % 2 = 1 then set 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
语句时,该语句影响了五行
行级触发器
:会被触发五次
语句级触发器
:不管影响了多少行,都只触发一次
- 语法