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’ 指具体的表名
      在这里插入图片描述
  • 删除
    在这里插入图片描述

在命令行中,执行创建存储过程的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 语句时,该语句影响了五行
行级触发器:会被触发五次
语句级触发器:不管影响了多少行,都只触发一次

在这里插入图片描述

  • 语法
    在这里插入图片描述
4.5 总结

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值