MySQL视图view/存储过程和函数的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px ".PingFang SC Semibold"; color: #454545 }
p.p3 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #454545 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 14.0px }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px ".PingFang SC"; color: #454545 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 14.0px }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px ".PingFang SC"; color: #454545 }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 15.0px }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px "Helvetica Neue"; color: #454545 }
p.p11 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px ".PingFang SC"; color: #454545 }
p.p12 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px ".PingFang SC Semibold"; color: #454545 }
p.p13 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a }
li.li1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
li.li4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 }
span.s1 { font: 17.0px "Helvetica Neue" }
span.s2 { font: 17.0px ".PingFang SC" }
span.s3 { font: 14.0px ".PingFang SC" }
span.s4 { font: 12.0px "Helvetica Neue" }
span.s5 { font: 12.0px ".PingFang SC" }
span.s6 { font: 10.0px Menlo }
span.s7 { font: 12.0px "Helvetica Neue"; text-decoration: underline; color: #e4af0a }
span.s8 { text-decoration: underline; color: #e4af0a }
span.s9 { font: 16.0px "Helvetica Neue" }
span.s10 { font: 12.0px ".Apple Color Emoji UI" }
span.s11 { text-decoration: underline }
span.s12 { font: 14.0px "Helvetica Neue" }
span.s13 { color: #e4af0a }
span.s14 { font: 12.0px "Helvetica Neue"; color: #e4af0a }
span.Apple-tab-span { white-space: pre }
ul.ul1 { list-style-type: disc }
**************************************
MySql视图view的使用:创建、修改、删除
***************************************
1. MySql创建视图
创建视图与创建表语法类似,不同的是创建视图是从一条查询语句创建的。视图创建后,可以像一张表一样使用,但只能用于数据查询,如:可以在一个查询中使用、可以在存储过程中、可以在另一个视图中使用。MySql创建视图语法如下:
CREATE VIEW 视图名 AS SELECT 查询语句;
2. MySql视图修改
已经创建的视图,有时会需要修改其查询字段或查询条件,MySql视图修改语法如下:
ALTER VIEW 视图名 AS SELECT 查询语句;
3. MySql视图删除
MySql视图删除语法与删除表DROP TABLE类型,语法如下:
DROP VIEW 视图名;
3. MySql视图使用
创建好视图之后,可以直接通过视图名使用视图,语法如下:
SELECT * FROM 视图名
***************************************
CREATE VIEW语句简介
***************************************
要在MySQL中创建新视图,请使用CREATE VIEW语句。 在MySQL中创建视图的语法如下:
让我们更详细地查看了解以上语法。
视图处理算法
算法属性允许您控制MySQL在创建视图时使用的机制。MySQL提供三种算法:MERGE,TEMP TABLE和UNDEFINED。
- 使用MERGE算法,MySQL首先将输入查询与定义视图的SELECT语句组合成单个查询。 然后MySQL执行组合查询以返回结果集。如果SELECT语句包含聚合函数,如:MIN, MAX, SUM, COUNT, AVG或DISTINCT, GROUP BY, HAVING, LIMIT, UNION, UNION ALL,子查询 等等则不允许MERGE算法。如果SELECT语句没有引用表,则也不允许MERGE算法。如果不允许MERGE算法,MySQL将算法更改为UNDEFINED。 注意,输入查询和视图定义中的查询到一个查询的组合被称为视图决议。
- 使用TEMP TABLE算法,MySQL首先根据定义视图的SELECT语句创建一个临时表,然后对该临时表执行输入查询。因为MySQL必须创建一个临时表来存储结果集,并将数据从基表移动到临时表,TEMP TABLE算法的效率低于MERGE算法。此外,使用TEMP TABLE算法的视图不可更新。
- UNDEFINED是创建视图时未指定显式算法的默认算法。UNDEFINED算法让MySQL做出选择使用MERGE或TEMP TABLE算法。MySQL优先选择MERGE算法再到TEMP TABLE算法,因为MERGE算法更有效率。
视图名称
在数据库中,视图和表共享相同命名空间,因此,视图和表不能具有相同的名称。 此外,视图的名称必须遵循表命名规则。
SELECT语句
在SELECT语句中,可以从数据库中存在的任何表或视图查询数据。SELECT语句必须遵循几个规则:
注意,SELECT语句不需要引用任何表。
**********************************************
Mysql中创建存储过程和函数的语法
**********************************************
mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数必须有返回值,并且函数的参数只有IN类型而存储过程有IN、OUT、INOUT这三种类型。
例子:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#创建数据库
DROP DATABASE IF EXISTS Dpro;
CREATE DATABASE Dpro
CHARACTER SET utf8
;
USE Dpro;
#创建部门表
DROP TABLE IF EXISTS Employee;
CREATE TABLE Employee
(id INT NOT NULL PRIMARY KEY COMMENT '主键',
name VARCHAR(20) NOT NULL COMMENT '人名',
depid INT NOT NULL COMMENT '部门id'
);
#插入测试数据
INSERT INTO Employee(id,name,depid) VALUES(1,'陈',100),(2,'王',101),(3,'张',101),(4,'李',102),(5,'郭',103);
#创建存储过程
#改变默认的分隔符(;)为“$$”来作为存储过程结束的标识,随后再恢复默认值。
DELIMITER $$
DROP PROCEDURE IF EXISTS Pro_Employee;
CREATE PROCEDURE Pro_Employee(IN pdepid VARCHAR(20),OUT pcount INT )
READS SQL DATA
SQL SECURITY INVOKER
BEGIN
SELECT COUNT(id) INTO pcount FROM Employee WHERE depid=pdepid;
# 多条sql语句
…
END$$
# $$代表存储过程的结束,再恢复默认的分隔符为(;)
DELIMITER ;
#执行存储过程, 变量名前面加上@,
CALL Pro_Employee(101,@pcount);
# 变量的查询也需要加上@
SELECT @pcount;
# 列出所有存储过程
SHOW PROCEDURE STATUS;
# 查看一个已存在的存储过程的信息
SHOW CREATE PROCEDURE <sp_name>;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DELIMITER $$
create procedure 存储过程名字()
(
[in|out|inout] 参数 datatype
)
begin
MySQL 语句;
end$$
DELIMITER ;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
注意⚠️
- MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。
- MySQL 存储过程名字后面的“()”是必须的,即使没有一个参数,也需要“()”
- MySQL 存储过程参数,不能在参数名称前加“@”,
- MySQL 客户端用户变量要加个“@”
- 提供了结构控制语句, 比如 IF, WHILE, CASE等等, 可以完成复杂的操作.另外, 定义存储过程, 以usp_前缀是区别系统存储过程和用户自定义存储过程的最佳实践.SET 对已声明的变量赋值或重新赋值,SELECT 显示变量; SELECT var into out_var 将变量值写入OUT参数。
BEGIN
DECLARE myvar INT;
SET myvar = (SELECT id FROM users LIMIT 1);
SELECT myvar into num;
END $$
- MySQL 存储过程的参数不能指定默认值
- 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。
- MySQL 存储过程中的注释。/* … */多行注释
- 条件语句:declare c int; if a is null then set c = 0; end if;
- 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()”
- 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
语法解释:
在创建存储过程的时候一般都会用
DELIMITER $$…BEGIN…END$$ DELIMITER ;放在开头和结束,目的就是避免mysql把存储过程内部的";"解释成结束符号,最后通过“DELIMITER ;”来告知存储过程结束。
存储过程的参数有三种类型:
- IN: 输入参数. 在调用存储过程时指定, 默认未指定类型时则是此类型.
- OUT: 输出参数. 在存储过程里可以被改变, 并且可返回.
- INOUT: 输入输出参数. IN 和 OUT 结合
characteristic部分:
LANGUAGE SQL:用来说明语句部分是SQL语句,未来可能会支持其它类型的语句。
[NOT] DETERMINISTIC:如果程序或线程总是对同样的输入参数产生同样的结果,则被认为它是“确定的”,否则就是“非确定”的。如果既没有给定DETERMINISTIC也没有给定NOT DETERMINISTIC,默认的就是NOT DETERMINISTIC(非确定的)CONTAINS SQL:表示子程序不包含读或写数据的语句。
NO SQL:表示子程序不包含SQL语句。
READS SQL DATA:表示子程序包含读数据的语句,但不包含写数据的语句。
MODIFIES SQL DATA:表示子程序包含写数据的语句。
SQL SECURITY DEFINER:表示执行存储过程中的程序是由创建该存储过程的用户的权限来执行。
SQL SECURITY INVOKER:表示执行存储过程中的程序是由调用该存储过程的用户的权限来执行。(例如上面的存储过程我写的是由调用该存储过程的用户的权限来执行,当前存储过程是用来查询Employee表,如果我当前执行存储过程的用户没有查询Employee表的权限那么就会返回权限不足的错误,如果换成DEFINER如果存储过程是由ROOT用户创建那么任何一个用户登入调用存储过程都可以执行,因为执行存储过程的权限变成了root)
COMMENT 'string':备注,和创建表的字段备注一样。
注意:在编写存储过程和函数时建议明确指定上面characteristic部分的状态,特别是存在复制的环境中,如果创建函数不明确指定这些状态会报错,从一个非复制环境将带函数的数据库迁移到复制环境的机器上如果没有明确指定DETERMINISTIC, NO SQL, or READS SQL DATA该三个状态也会报错。
**********************************************
Mysql中事务处理块
**********************************************
MySQL视图view/存储过程和函数的使用的更多相关文章
- MySql视图、存储过程、函数、索引
一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 - ...
- 八、mysql视图、存储过程、函数以及时间调度器
.create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 .drop view emp_view 删除视图 ...
- MySQL视图 索引 存储过程 触发器 函数
视图: 也就是一个虚拟表(不是真实存在的),它的本质就是根据SQL语句获取动态的数据集,并为其命名.用户使用时只需要使用命名的视图即可获取结果集,并可以当做表来使用.它的作用就是方便查询操作,减 ...
- mysql 视图 触发器 存储过程 函数事务 索引
mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...
- 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
- 在PowerDesigner中设计物理模型3——视图、存储过程和函数
原文:在PowerDesigner中设计物理模型3--视图.存储过程和函数 视图 在SQL Server中视图定义了一个SQL查询,一个查询中可以查询一个表也可以查询多个表,在PD中定义视图与在SQL ...
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...
- MySQL 第十天(视图、存储过程、函数、触发器)
MySql高级-视图.函数.存储过程.触发器 目录 一.视图 1 1.视图的定义 1 2.视图的作用 1 (1)可以简化查询. 1 (2)可以进行权限控制, 3 3.查询 ...
- mysql事务、触发器、视图、存储过程、函数
存储过程: procedure 概念类似于函数,就是把一段代码封装起来, 当要执行这一段代码的时候,可以通过调用该存储过程来实现. 在封装的语句体里面,可以用if/else, case,while等控 ...
随机推荐
- 【HTML】section
1. 定义 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中的其他部分. 2. div.section . article的区别 div: 本身没有任何语义,用作布局以及样式 ...
- 【MYSQL】主从库查看及搭建
show slave status 查看从库信息 http://blog.csdn.net/lxpbs8851/article/details/7898716 搭建主从库 http://www. ...
- cesium 获取点击点的高程
var picklHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);picklHandler .setInputAct ...
- 分享 C++图像处理的代码简易示例
采用Decoder:stb_image https://github.com/nothings/stb/blob/master/stb_image.h 采用Encoder:tiny_jpeghttps ...
- java大数取余
java大数取余: 类方法:BigInteger.divideAndRemainder() 返回一个数组,key = 0为商key = 1为余数 import java.util.*; import ...
- windows下vue.js开发环境搭建教程
这篇文章主要为大家详细介绍了windows下vue.js开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中 ...
- Python实现使用tkinter弹出输入框输入数字, 具有确定输入和清除功能
Python3.6中用tkinter, 弹出可以输入数字的输入框. # Copyright (c) 2017-7-21 ZhengPeng All rights reserved. def pop_u ...
- SGI STL 内存分配方式及malloc底层实现分析
在STL中考虑到小型区块所可能造成的内存碎片问题,SGI STL设计了双层级配置器,第一级配置器直接使用malloc()和free();第二级配置器则视情况采用不同的策略:当配置区块超过128byte ...
- leetcode range sum query
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...
- MVC项目中使用百度地图
已经很久没更新博客了,因为最近一直在学习前端的知识,没那么多时间,写博客或者写文章不但没有钱,写得好还好说,如果写得不好,一些吃瓜群众,不仅要喷你,搞不好还要人身攻击就不好了.所以写博客的人,脸皮得厚 ...