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也可以对视图做一些操作: 由于 ... 
随机推荐
- Java实现第十届蓝桥杯质数
			试题 D: 质数 本题总分:10 分 [问题描述] 我们知道第一个质数是 2.第二个质数是 3.第三个质数是 5--请你计算 第 2019 个质数是多少? [答案提交] 这是一道结果填空的题,你只需要 ... 
- 流程图(HTML5拖拽)
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- Firewalld 的基本使用
			RHEL 7 系统中集成了多款防火墙管理工具,其中 firewalld(Dynamic Firewall Manager of Linux systems,Linux 系统的动态防火墙管理器)服务是默 ... 
- 华为EMUI在service中不能打印debug级别的日志
			华为emui在service里面不能打印debug级别的日志,因为这个小问题调试了一上午,刚开始我还以为emui把系统service的启动流程都改了呢 
- 微信weixin://xxx 分析
			通过weixin://来打开微信客户端: <a href="weixin://">打开微信</a> <a href="weixin://dl ... 
- yii2中的场景使用
			下面给大家介绍一下 yii2.0 场景的使用.小伙多唠叨一下了,就是担心有的人还不知道,举个简单的例子,现在在 post表里面有 title image content 三个的字段,当我创建一个 po ... 
- Alink漫谈(七) : 如何划分训练数据集和测试数据集
			Alink漫谈(七) : 如何划分训练数据集和测试数据集 目录 Alink漫谈(七) : 如何划分训练数据集和测试数据集 0x00 摘要 0x01 训练数据集和测试数据集 0x02 Alink示例代码 ... 
- JDBC——什么是JDBC?
			JDBC:Java数据库连接(Java DataBase Connectivity),是Java语言中用来规范客户端如何程序如何来访问数据库的应用程序接口(API),提供了诸如查询和更新数据库中数据的 ... 
- c++运算符重及其调用
			本文参考自:https://blog.csdn.net/lisemi/article/details/93618161 运算符重载就是赋予运算符新功能,其本质是一个函数. 运算符重载时要遵循以下规则: ... 
- 关于HTTP 请求方式: GET和POST的比较的本质
			什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request ... 
