MySQL最后的一些基础知识
1 变量
1.1 分类
- (1)系统变量
- 全局变量
- 会话变量
- (2)自定义变量
- 用户变量
- 局部变量
1.2 系统变量
- 变量由系统提供,不是用户定义,属于服务器层面
1 | # 查看全局|会话变量(不写global / seesion 默认为session) |
- 全局变量:
- 作用域:服务器每次启动将为所有的全局变量赋初始值,这对所有的会话有效,但不能跨重启
- 会话变量:
- 作用域:仅仅针对当前会话有效
1.3 自定义变量
- 变量是用户自定义的,不是由系统提供
- 用户变量:
- 作用域:针对于当前会话有效
1 | # 声明并初始化(三者都可以) |
- 局部变量:
- 仅仅定义在它的begin end中有效
- 应用在 begin and 中的第一句话
1 | # 声明 |
1.4 总结
变量 | 作用域 | 定义和使用的位置 | 语法 |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须添加@符号,不用限定类型 |
局部变量 | begin end 中 | 只能在begin end中,且为第一句话 | 一般不用添加@符号,需要限定类型 |
2 存储过程
2.1 介绍
- 存储过程和函数:类是Java中的方法,封装了一系列的执行逻辑
- 优点:简化操作
2.2 存储过程
- 定义:一组预先编译好的SQL语句的集合
- 优点:
- (1)提高了代码的重用性,一旦编译过一次就不需再次编译
- (2)简化操作
- (3)减少了编译次数并且减少了和数据库服务器连接次数,提高了效率
- 参数模式:
- in:默认值,修饰的参数作为输入,需要调用方传入值
- out:该参数作为输入,意思为作为返回值
- inout:该参数既可以作为输入,也可以作为输出
1 | # 创建存储过程 |
2.3 存储过程演示
- (1)in演示
- 输入班级编号,查询班级名称
- (2)out演示
- 输入学生姓名,返回班级编号
- (3)inout演示
- 输入一个值,返回该值的两倍(简单运算)
3 函数
3.1 介绍
- 函数和存储过程几乎一样,只是返回值有不同
- 区别:
- 存储过程:可以有0个返回,或有多个返回。时候做批量插入、批量更新
- 函数:有且仅有1个返回,适合做处理数据后返回一个结果
3.2 语法
1 | # 创建函数 |
3.3 函数演示
- 传入学生信息,返回学生成绩
- 若创建函数出现以下错误
- 解决方法:
set global log_bin_trust_function_creators=true
4 流程控制结构
4.1 介绍
- 顺序结构:程序从上往下依次执行
- 分支结构:程序从两条或多条路径中选一条出执行
- 循环结构:程序在满足一定条件的基础上,重复执行一段代码
4.2 分支结构
- (1)if函数
- 语法:
if(判断表达式, true表达式, false表达式)
- 解释:判断表达式返回true,就返回true表达式值,否则返回false表达式的值
- 作用域:任何地方法
- 语法:
- (2)case结构
- 情况1:类似java中的switch语句,一般用于实现等值判断
- 情况2:类似java中的多重if语句,一般用于实现区间判断
- 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end中或begin end的外面
- 可以作为独立的语句去使用,只能方法begin end中
1 | # 情况1(作为语句时,最后要加case) |
- (3)if结构
- 实现功能多重分支
- 应用场景:只能应用在begin end中
1 | if 条件1 then 语句1; |
4.3 循环控制
- 分类:while、loop、repeat
- 循环控制:
- iterate类似使用continue,结束本次循环,继续下一次
- leave类似于break,跳出,结束
- (1)while
1 | # 一般情况 |
- (2)loop
- 一个死循环,需要循环控制来跳出循环
1 | # 同while需要使用循环控制要添加标签 |
- (3)repeat
- 类似Java的do while
1 | # 与上同理 |