MySQL-视图、变量、存储过程、函数
视图
- 定义:一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。
存在的意义
- 重用sql语句
- 简化复杂的sql操作,不必知道它的查询细节
- 保护数据,提高安全性:仅提供所需字段,保护其余字段隐私。
创建
- 语法
create [or replace] view 视图名 as 查询语句;
修改(视图结构)
- 语法
#方式一 create or replace view 视图名 as 查询语句; #方式二 alter view 视图名 as 查询语句;
删除
- 语法
drop view 视图名1, 视图名2...;
查看
- 语法
#方式一 desc 视图名; #方式二 show create view 视图名;
更新(值)
- 视图的可更新性和视图中查询的定义有关系,以下类型的视图时不能更新。
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
- 常量视图
- select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
变量
系统变量
全局变量
show global variables [like '%x%'];
会话变量
show session variables [like '%x%'];
自定义变量
用户变量
局部变量
存储过程
- 类似于java中的方法
- 含义:一组预先编译好的sql语句的集合,理解成批处理语句
- 作用:
- 提高代码的重用性
- 简化操作
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
创建
- 语法
create procedure 存储过程名(参数列表) begin 存储过程体(一组合法的sql语句) end
- 注意:
- 参数列表包含三部分
参数模式 参数名 参数类型
举例:in stuname varchar(20)
- 参数模式
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既可以传入值,又可以返回值 - 如果存储过程体仅仅只有一句话,begin end可以省略;存储过程体中的每条sql语句的结尾要求必须加分号。
- 参数列表包含三部分
调用
- 语法
call 存储过程名(实参列表);
查看
- 语法
show create procedure 存储过程名;
删除
- 语法
drop procedure 存储过程名;
函数
-
含义:一组预先编译好的sql语句的集合,理解成批处理语句
-
作用:
- 提高代码的重用性
- 简化操作
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
-
区别
- 存储过程:可以由0或多个返回。适合用于批量插入、批量更新。
- 函数:有且仅有1个返回。适合由于处理数据后返回一个结果。
创建
- 语法
create function 函数名(参数列表) returns 返回类型 begin 函数体 end
- 注意:
- 参数列表 包含两部分:
参数名 参数类型 - 函数体:肯定会有return语句,如果没有会报错;如果return语句没有放在函数体的最后也不会报错,但不建议
- 函数体中仅有一句话时,可以省略begin end
- 使用delimiter语句设置结束标语
- 参数列表 包含两部分:
调用
- 语法
select 函数名(参数列表);
查看
- 语法
show create function 函数名;
删除
- 语法
drop function 函数名;
流程控制结构
顺序结构
- 程序从上往下一次执行
分支结构
- 程序从两条或多条路径中选择一条去执行
- if函数
- 功能:实现简单的双分支
- 语法
if(表达式1, 表达式2, 表达式3) #执行顺序:如果表达式1成立,则if函数返回表达式2的值,否在返回表达式3的值。类似于三元运算符
- case结构
循环结构
- 程序在满足一定条件的基础上,重复执行一段代码
- while结构
- loop结构
- repeat结构