SQL基础随记2 视图 存储过程
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 视图 存储过程的更多相关文章
- SQL基础随记3 范式 键
SQL基础随记3 范式 键 什么是范式?哈,自己设计会使用但是一问还真说不上来.遂将不太明晰的概念整体下 什么是 & 分类 范式(NF),一种规范,设计数据库模型时对关系内部各个属性之间的 ...
- SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束
SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束 其实这里知识不难,只是好久不接触突然被问的话有时还真的一时答不上,自己写一遍胜过盲扫.当然,也有些常读常新的地方会 ...
- SQL基础(3)-索引/触发器/视图操作
本文只列出索引,触发器,视图的简单操作语句 1.索引 a.创建 create index idx_name on fdh_client_info(name); --普通索引(单列索引) create ...
- sql:MySQL 6.7 表,视图,存储过程结构查询
#数据库MySQL 6.7 use sakila; #查询表名 show tables; # SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA. ...
- 四、SQL基础知识--约束和视图
--创建约束的方式 --一.在字段创建时将约束添加到字段之后 CREATE TABLE ZYJ_YUESHU( ZYJ_ID VARCHAR(20) NOT NULL PRIMARY KEY, --创 ...
- SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...
- [SQL基础教程] 5-1视图
[SQL基础教程] 5-1视图 视图和表 从SQL角度看视图就是一张表 视图与表的差别 表保存了实际的数据,视图保存的是SELECT语句: 视图的优点 节省存储空间: 将常用的Select 语句保存成 ...
- T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)
T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b nvarchar(10) ; 2.赋值: 法1:set @变量名 ...
- SQL基础学习_04_视图
视图 1. 视图的创建 视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作: 由于 ...
随机推荐
- (八)DVWA之SQL Injection--SQLMap&Burp测试(Medium)
一.测试需求分析 测试对象:DVWA漏洞系统--SQL Injection模块--User ID提交功能 防御等级:Medium 测试目标:判断被测模块是否存在SQL注入漏洞,漏洞是否可利用,若可以则 ...
- LB服务:硬件如何被软件取代(上)
[摘要] 大业务上云,难免要用到LB.可是,您是否了解LB的来龙去脉?本文浅谈一下LB,从硬件走到软件,他们经历了什么转变. 大业务上云,难免要用到LB.可是,您是否了解LB的来龙去脉?本文浅谈一下L ...
- zabbix 磁盘分区监控
系统环境 Zabbix 版本:3.4 操作系统版本:centos7.4 监控分区 / ./boot ./home 先创建监控项的模板 点击创建监控项 名称随意填写,键值的话因为我们监控车的是磁盘剩 ...
- 实验二 Linux系统简单文件操作命令
项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接接地址 学号-姓名 17041428-朱槐健 作业学习目标 1.学习在Linux系统终端下进行命令行操作 2.掌 ...
- WinForm通用自动更新AutoUpdater项目实战
目前我们做的上位机项目还是以Winform为主,在实际应用过程中,可能还会出现一些细节的修改.对于这种情况,如果上位机带有自动更新功能,我们只需要将更新后的应用程序打包放在指定的路径下,可以让用户自己 ...
- AJAX的GET请求、POST请求
感谢:链接(视频讲解很详细) AJAX(Asynchronous Javascript and XML):异步的JavaScript和XML(不需要刷新网页就可以更新网页数据) XML:百度百科 是一 ...
- 懒羊羊找朋友(struct实现优先排序)
4907: 懒羊羊找朋友(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- laravel向视图传递变量
向视图中传递变量 我们在开发web应用当中,通常都不是为了写静态页面而生的,我们需要跟数据打交道,那么这个时候,问题就来了,在一个MVC的框架中,怎么将数据传给视图呢?比如我们要在 ArticleCo ...
- IP地址、计算机名称、MAC地址如何获取
以下的操作都在“命令提示窗口”中操作. 已知IP,如何获得计算机名称 方法(1): 使用ping -i ip地址 例如已知地址为192.168.1.168. 那么使用ping -i 192.168.1 ...
- Beta冲刺测试随笔
测试工作安排 人员安排: 余文锦,孙劼成,陈富杰,明锐,王彦杰,陈康杰:测试 杨铭海,张鑫宇测试用例的编写 测试工具选择和运用 本来计划Beta冲刺挑选人员进行测试相关的接触和学习并胜任测试工作,但是 ...