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...THEN...;END IF; REPEAT...UNTIL...END REPEAT --- 满足UNTIL后面的表达式则退出循环
      WHILE...DO...END WHILE --- 先判断条件,满足则循环
      labelName:LOOP...(IF...THEN...LEAVE labelName;END IF;)...END LOOP labelName;
      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)

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

 

SQL基础随记2 视图 存储过程的更多相关文章

  1. SQL基础随记3 范式 键

    SQL基础随记3 范式 键 什么是范式?哈,自己设计会使用但是一问还真说不上来.遂将不太明晰的概念整体下   什么是 & 分类 范式(NF),一种规范,设计数据库模型时对关系内部各个属性之间的 ...

  2. SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束

    SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束   其实这里知识不难,只是好久不接触突然被问的话有时还真的一时答不上,自己写一遍胜过盲扫.当然,也有些常读常新的地方会 ...

  3. SQL基础(3)-索引/触发器/视图操作

    本文只列出索引,触发器,视图的简单操作语句 1.索引 a.创建 create index idx_name on fdh_client_info(name); --普通索引(单列索引) create ...

  4. sql:MySQL 6.7 表,视图,存储过程结构查询

    #数据库MySQL 6.7 use sakila; #查询表名 show tables; # SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA. ...

  5. 四、SQL基础知识--约束和视图

    --创建约束的方式 --一.在字段创建时将约束添加到字段之后 CREATE TABLE ZYJ_YUESHU( ZYJ_ID VARCHAR(20) NOT NULL PRIMARY KEY, --创 ...

  6. SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

    原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...

  7. [SQL基础教程] 5-1视图

    [SQL基础教程] 5-1视图 视图和表 从SQL角度看视图就是一张表 视图与表的差别 表保存了实际的数据,视图保存的是SELECT语句: 视图的优点 节省存储空间: 将常用的Select 语句保存成 ...

  8. T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)

    T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b  nvarchar(10) ; 2.赋值: 法1:set @变量名 ...

  9. SQL基础学习_04_视图

    视图 1. 视图的创建     视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作:     由于 ...

随机推荐

  1. Java实现 黑洞数

    任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456.求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则 ...

  2. 【Vlog】Jmeter之使用beanshell将json提取器中的多个值拼接为一个列表

    场景如下: json提取器返回了当前登录用户的所有好友id,然而下一个接口是把好友id拼成一个数组进行传参的,现需将所有的好友ID拼接起来,类似ID1,ID2,ID3......这样 beanshel ...

  3. vue2.0 + element ui 实现表格穿梭框

    element ui 官网里介绍了穿梭框(Transfer),但在实际使用过程中,会出现一些问题: 1.穿梭框里能放置的内容太少,不能满足复杂的业务需求. 2.当选项过多时,穿梭框很难实现分页,左右两 ...

  4. centos7上安装memcached以及PHP安装memcached扩展(一)

    安装memecached 第一步:安装libevent # tar zvxf libevent-2.1.8-stable.tar.gz # cd libevent-2.1.8-stable # ./c ...

  5. Nice Jquery Validator 快速上手

    (1).直接引用 一行代码引入插件,local 参数用来加载对应的配置文件.如果不传 local 参数,配置以及样式就需要自行引入. <script src="path/to/nice ...

  6. 基于httpclient的一些常用方法封装

    package com.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import ja ...

  7. pip速度过慢解决方法

    国内源: 新版ubuntu要求使用https源,要注意. 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.c ...

  8. git安装和第一次提交过程

    1,新建文件夹test,运行命令 git init 2,找到test的.git文件夹,打开之后找到config文件,在最后边加上一句话 [user] email=your email name=you ...

  9. C语言中main函数的参数argc和argv

    参考资料: http://wiki.opencv.org.cn/index.php/Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv% ...

  10. macos的两个快捷键和一个小tip

    学校的linux协会介绍了一个免费的light轻量级加速器,昨天晚上十点左右的时候着手研究,发现其实就是一个代理服务器.在配置这个代理服务器的时候碰到了一些困难并最终都解决了.下面记录一下配置过程学到 ...