zoukankan      html  css  js  c++  java
  • 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());

    定定义

     士大夫撒发斯蒂芬 

  • 相关阅读:
    HTTP与HTTPS
    各种排序算法的比较
    数据结构之堆排序
    数据结构之希尔排序
    快速排序与归并排序的区别与联系
    数据结构之快速排序
    DVWA-4.3 File Inclusion(文件包含)-High-利用file协议绕过防护策略
    DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则
    DVWA-4.1 File Inclusion(文件包含)-Low
    DVWA-3.4 CSRF(跨站请求伪造)-Impossible
  • 原文地址:https://www.cnblogs.com/wyk1/p/13428014.html
Copyright © 2011-2022 走看看