本章目标:

  • 掌握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());

定定义

士大夫撒发斯蒂芬

MySQL--->高级对象的更多相关文章

  1. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  2. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  3. 第三章 MySQL高级查询(一)

    第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...

  4. mysql高级、索引

    一.mysql高级 1.视图 # 引子 select * from emp left join dep on emp.dep_id = dep.id union select * from emp r ...

  5. Mysql 高级部分

    MySQL 高级部分   (1)索引(index)..................................................................... 1 (2) ...

  6. 干货:鲜为人用的MySQL高级特性与玩法!

    上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...

  7. mysql高级day4

    Mysql高级-day04 1. MySql中常用工具 1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具. 语法 : mysql [options] [databas ...

  8. mysql高级day1

    Mysql高级-day01 MySQL高级课程简介 序号 Day01 Day02 Day03 Day04 1 Linux系统安装MySQL 体系结构 应用优化 MySQL 常用工具 2 索引 存储引擎 ...

  9. MySQL高级查询与编程作业目录 (作业笔记)

    MySQL高级查询与编程笔记 • [目录] 第1章 数据库设计原理与实战 >>> 第2章 数据定义和操作 >>> 2.1.4 使用 DDL 语句分别创建仓库表.供应 ...

  10. MySQL高级查询与编程笔记 • 【目录】

    章节 内容 实践练习 MySQL高级查询与编程作业目录(作业笔记) 第1章 MySQL高级查询与编程笔记 • [第1章 数据库设计原理与实战] 第2章 MySQL高级查询与编程笔记 • [第2章 数据 ...

随机推荐

  1. 从零开始学Electron笔记(五)

    在之前的文章我们介绍了一下Electron的右键菜单的制作,接下来我们继续说一下Electron如何通过链接打开浏览器和嵌入网页. 现在有这样一个需求,我们要在我们的软件中加一个链接,然后点击该链接打 ...

  2. mysql实现主从复制/主从同步

    业务场景 小公司业务代码存于一个服务器上,而这个服务器有的时候回宕机,导致业务停顿,造成影响.这个时候 就需要做高可用 两个ngix+两个tomcat+两个mysql实现高可用,避免单点问题.中间使用 ...

  3. SSM框架前后端信息交互

    一.从前端向后端传送数据 常见的3种方式 1.form表单的action:此方法可以提交form表单内的输入数据,也可同时提交某些隐藏但设置有默认值的<input>,如修改问题时,我们除了 ...

  4. Makefile中的目标

    Makefile中的目标 一般目标 目标就是我们需要的最终文件,也是make的最终输出 Makefile的运行机制是:先将目标当成文件,查看文件是否存在,如果存在且是最新,那么直接结束,如果文件不存在 ...

  5. Vue使用定时器定时刷新页面

    1. 需求说明 在前端开发中,往往会遇到页面需要实时刷新数据的情况,给用户最新的数据展示. 2. 逻辑分析 如果需要数据实时更新,我们自然是需要使用定时器,不断的调用接口数据,会相对的消耗内存. 3. ...

  6. 【mysql】- 索引简介篇

    简介 我们都知道mysql使用存储引擎的是InnoDB,InnoDB使用的索引的对应的数据结构是B+树 结构图: 如上图所示,我们实际用户记录是存放在B+树的最底层的节点上,这些节点也被称为叶子节点或 ...

  7. java opencsv解析csv文件

    记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...

  8. Redis(一)简介及安装、测试

    一.Redis简介: 关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库.从性能上而言, ...

  9. c++ string类find总结

    c++ string类的find:1.find string s = "My cat's breath smells like cat food."; int a=s.find(& ...

  10. link小图标以及表格的用法基础

    一.网页小图标的实现 实例: 实现方式: 效果: 二.表格基础 1.表格的组合标签 常用: table tr td caption ①table属性 border  边框 width  宽度 默认按照 ...