我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL基础随记2 视图 存储过程 - G

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL基础随记2 视图 存储过程 - G

SQL基础随记2 视图 存储过程 - G

SQL基础随记2 视图 存储过程

 

View

  • CREATE/ALTER/DROP VIEW ViewName as SELECT(...)
    
  • 可以在视图的基础上继续创建视图,即,将之前创建的视图当做表名放在新视图的select语句中

  • 利用视图进行数据格式化(就是对字段进行重新组合与拼接)

    CREATE VIEW View_player_team AS 
    SELECT CONCAT(player_name, "(" , team.team_name , ")") AS player_team
    FROM player JOIN team WHERE player.team_id = team.team_id
    
  • 视图具有安全性,因为视图是虚拟表,即使对视图做出了修改,也不会影响底层数据。

 

PROCEDURE

  • 存储过程就像“自定义函数”,它是SQL语句和流控制语句的集合,它可以接受参数,也可以返回参数。

  • 存储过程可以(不是一定)直接对底层数据表进行操作

  • CREATE PROCEDURE name(参数)
    BEGIN
    	需要执行的过程
    END
    

    举例1,

    DELIMITER //
    
    CREATE PROCEDURE `存储过程名`(形参)
    BEGIN
    	循环体
    END //
    
    DELIMITER;
    

    调用存储过程举例

    CALL `存储过程名`(实参);
    select @(out参数)
    
    • DELIMITER是将分隔符变为 // (也可以使用其他的),因为流控制语句中的语句需要;分割,此举是避免混淆

    • 开头和结尾的DELIMITER都是另起一行mysql shell

    • 存储过程名用的不是单引号,是英文的 "顿点"

    • 流控制语句

      DECLIARE --- 声明变量
      SET --- 初始化,赋值
      IF...ELSE...
      
      REPEAT...UNTIL...END REPEAT --- 满足UNTIL后面的表达式则退出循环
      WHILE...DO...END WHILE --- 先判断条件,满足则循环
      CONTINUT;
      BREAK;
      RETURN;
      GOTO (label)
      WAITFOR TIME "time" --- 在某个时刻执行
      WAITFOR DELAY "time" --- 延迟某个时间执行
      SELECT...INTO... --- 将查询表中的结果放入变量中
      
  • 参数类型

    • IN --- 传入参数,无法返回,不写参数类型默认为IN
    • OUT --- 将存储过程的计算结果放入OUT参数中并用于返回
    • INOUT --- 既用于传入参数又可以将结果存入该参数中用于返回
  • PROCEDURE的优点

    • 安全性强,设定存储过程的时候可以设置对用户的使用权限
    • 执行效率快,在MySQL数据库服务器端执行
    • 通过封装,减少网络传输量
  • PROCEDURE的缺点 --- 阿里等公司不推荐使用的原因

    • 调试困难,仅少部分DBMS支持调试
    • 可移植性差
    • 版本管理困难
    • 不适合高并发场景 --- 高并发需要减小数据库压力,可能会采用分库分表的方式且对拓展性要求高。在这种情况下,存储过程变得难以维护且会增加数据库的压力

 

procedure 举例1 按某个字段对表进行查询

  • 查看已有测试表

    mysql> SELECT * FROM t; 
    +----+------+
    | Id | nums |
    +----+------+
    |  1 |    2 |
    +----+------+
    1 row in set (0.00 sec)
    

    创建存储过程

    mysql> DELIMITER //
    mysql> CREATE PROCEDURE `findByNums`(IN n int)
        -> BEGIN
        -> SELECT * FROM t WHERE nums = n;
        -> END //
    Query OK, 0 rows affected (0.03 sec)
    

    检验

    mysql> DELIMITER ;
    mysql> CALL findByNums(2);
    +----+------+
    | Id | nums |
    +----+------+
    |  1 |    2 |
    +----+------+
    1 row in set (0.03 sec)
    
    Query OK, 0 rows affected (0.03 sec)
    

    (传入不同参数)

    mysql> CALL findByNums(1);
    Empty set (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    

     

  • 查询存储过程

    mysql> SELECT * FROM mysql.proc WHERE db = "test" AND type = "procedure";
    

 

procedure 举例2 计算累和结果

  • 使用存储过程传入/传出参数查询输出

    mysql> delimiter //
    mysql> create procedure `add_sum`(in n int, out result int)
        -> begin
        -> declare i int;
        -> declare sum int;
        -> set i = 1;
        -> set sum = 0;
        -> while i < n do
        -> set sum = sum + i;
        -> set i = i + 1;
        -> end while;
        -> end //
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter ;
    mysql> call add_sum(50,@result);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select @result;
    +---------+
    | @result |
    +---------+
    |    1225 |
    +---------+
    1 row in set (0.00 sec)
    
    
  • 无法直接@存储过程中的变量

    mysql> create procedure `add_sum_procedure`(in n int)
        -> begin
        -> declare i int;
        -> declare sum int;
        -> set i = 1;
        -> set sum = 0;
        -> while i < n do
        -> set sum = sum + i;
        -> set i = i + 1;
        -> end while;
        -> end //
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter ;
    mysql> call add_sum_procedure(10);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select @sum;
    +------+
    | @sum |
    +------+
    | NULL |
    +------+
    1 row in set (0.01 sec)
    

查询所有存储过程/视图 等等

  • https://www.cnblogs.com/G-Aurora/p/13196812.html

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL基础随记2 视图 存储过程 - G

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL基础随记2 视图 存储过程 - G

SQL基础随记2 视图 存储过程 ViewCREATE/ALTER/DROP VIEW ViewName as SELECT(...)可以在视图的基础上继续创建视图,即,将之前创建的视图当做表名放在新视图的select语句中利用视图进行数据格式化(就是对字段进
SQL基础随记2 视图 存储过程 - G
2020-04-02

SQL-视图与存储过程

原文:https://www.cnblogs.com/ccccz/p/13982650.html
SQL-视图与存储过程
2015-05-07

MySQL 查询所有存储过程视图 等等 - G

MySQL 查询所有存储过程视图 等等 INFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.TABLES是MySQL自带的(被视作)一个信息数据库,保存着MySQL服务器所维护的其他数据库的信息。INFORMATION_SC
MySQL 查询所有存储过程视图 等等 - G
2019-12-22

MySQL基础篇(04):存储过程和视图,用法和特性详解

本文源码:GitHub·点这里 || GitEE·点这里一、存储过程1、概念简介存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行。存储过程核心思想就是数据库SQL语言层面的封装与重用性。使用存储过程可以较
MySQL基础篇(04):存储过程和视图,用法和特性详解
2020-12-21

【2020Python修炼记】MySQL之 视图、触发器、事务、存储过程、函数

【目录】(其余均为了解知识)一 视图二 触发器三 事务(掌握)四 存储过程五 函数六 流程控制七、索引理论 一、视图1、什么是视图视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,
【2020Python修炼记】MySQL之 视图、触发器、事务、存储过程、函数
2018-03-18

SQL Server判断数据库、表、列、视图、存储过程、函数是否存在总结

目录一、前言概述二、数据库相关的判断2.1、判断数据库是否存在三、数据表相关的判断3.1、判断数据表是否存在3.2、判断临时表是否存在3.3、判断表是否存在某列3.4、判断列是否自增列3.5、判断表中是否存在索引四、视图相关的判断4.1、判
2023-05-05

编程热搜

目录