MySQL--->高级对象

本章目标:

  • 掌握MySQL视图
  • 掌握MySQL存储过程
  • 掌握MySQL触发器

1.视图:

  视图就是一条select语句执行后返回的结果集。

  • 使用场景:权限控制的时候不希望用户访问表中某些敏感信息的列
  1. 创建视图

      create  view  视图名称

      AS

      Select  语句

   2.修改视图

      alter  view  视图名称

      AS

      Select  语句

   3.删除视图

      show  tables  显示视图

      drop view 视图名

      drop  view  if  exists  视图名

  查看视图 : select  *   from  视图表名

2.存储过程:

  定义:

  • 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段。类似于功能函数

  显示所有的存储过程Show  procedure  staus  

  2.1创建存储过程:

      修改sql语句结束的标识符:  delimiter + 类型

      create  procedure  存储过程名称(参数列表)

      BEGIN

      存储操作的语句块;

      END

      调用:  call   存储过程名称

   2.2存储过程参数分为两种

  1. IN  给参数传入值,定义的参数就得到了值。
    • in  参数名  +  表中字段的类型

  创建一个无参无返的存储过程:

  #存储过程实现能够查询所有的借阅记录。
  select * from info;

  #修改sql语句结束的标识符
  delimiter //
  CREATE PROCEDURE pro_info()
  begin
  select * from info;
  end//

  创建一个无参有返的存储过程:

    1.out :返回值

    • out  参数名 + 要返回的数据的类型

  #实现的功能是查询出所有图书的平均价格。
  select avg(price) as 平均价格 from books;
  -- out 参数的名称 数据类型
  DELIMITER //
  create PROCEDURE pro_info2(out priceAvg FLOAT)
  BEGIN
  select avg(price) INTO priceAvg from books;  into   相当于赋值
  END//
  call pro_info2(@priceAvg); 参数@+名称
  select @priceAvg;

  创建一个有参无返的存储过程:

  #这个存储过程要实现的功能是,查询某个价格范围内(20-200)的图书信息
  select * from books where price BETWEEN 20 and 200; 10 1000

  -- 有参数 第一个价格 第二个价格
  -- in 名字 数据类型
  -- out
  delimiter //
  create PROCEDURE pro_info1(in price1 FLOAT,in price2 FLOAT)
  BEGIN
  select * from books where price BETWEEN price1 and price2;
  end//

  -- 有参数 call 存储过程的名字(传入的参数)
  call pro_info1(10,200); 

    2.2删除存储过程

  • drop  procedure  [if   exists]  存储过程的名字
  • 显示所有的存储过程: Show  procedure  staus  

3.触发器

  定义:

  • 当一件事发生的时候,会引发其他相关的时间发生
  • 只要当一个预定义的事件发生的时候,就会被MySQL自动调用

   语法:

      修改sql语句结束的标识符:  delimiter + 类型

      create  trigger  触发器名称  {befor | after }{insert | update | delete } on 表名

      for  each  row 

      begin

        触发器执行的语句块

      end

    案例1:

  例1:创建insert触发器。当在card表中新增加一个借阅用
  -- 户的时候,显示“新增用户成功”。

  DELIMITER //
  create trigger tri_ins_card after insert on card
  for each row
  begin
  select "新增用户成功" into @result;
  end

  select * from card;
  insert into card (name,class)values("王渝凯","大数据1班");
  select @result;

  select @resu;

    案例2:

 

 

#例2:创建insert触发器。借阅人借阅一本书会在info表中
  -- 产生一条记录,此时被借阅的书籍的总数量应该减1。触发
  -- 在info表中。

  -- 对图书表的里面图书数量进行减1,对哪本书进行减1呢

  -- update books set quanitity=quanitity-1 where 哪本书
  -- --如果我们能够拿到新插入的那条借阅记录的bno
  select * from info;
  DELIMITER //
  create TRIGGER tri_insert_info after insert on info
  for each row
  begin
  select new.bno into @bnoValue;-- 拿到插入的那条借阅记录的bno
  update books set quanitity=quanitity-1 where bno=@bnoValue;-- 进行数量的更新
  end

  select * from books;
  select * from info;
  select * from card;

  insert into info(cno,bno,rdate)value(106,1006,NOW());

定定义

 士大夫撒发斯蒂芬 

 

posted @ 2020-08-03 18:44  大可耐啊  阅读(167)  评论(0编辑  收藏  举报