MySQL高级教程笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M y S Q L高级教程笔记 The latest revision on November 22, 2020
MySQL-高级
MySQL中的SQL编程的话题.
触发器, 存储函数, 存储过程
以上的是三个名词, 在SQL编程中, 地位是: 程序的载体, 程序的结果.编程所涉及的要素:
变量, 数据类型, 流程控制, 函数, 运算符, 表达式.
2.1内置函数
MySQL自动提供的函数!
例如: database(), now(), md5()
2.2自定义函数–存储函数
用户定义定义的, 存储在MySQL中的函数. 2.2.1create function, 创建函数
适用语法:来创建函数
2.2.2调用函数
2.2.3drop function , 删除函数
drop function [if exists] function-name;
3变量–编程要素
程序处理数据.
数据在程序中的容器, 就是变量.
强类型
3.1全局变量
函数外定义的变量
变量不需要声明, 直接去设置即可!
PS, 内置的变量: set autocommit = off, 不以 @开头
3.2局部变量
函数内定义的变量
使用declare来声明.
不需要使用@, 表示是用户自定义变量.
强类型, 定义的局部变量, 必须定义为某种类型, 类型的表述与字段的类型一致!
3.3重叠(嵌套)作用域
局部内, 可访问到全局变量
PS: 与JS保持一致1
3.4变量的赋值
3.4.1set 变量 = 值
3.4.2select into 变量
当需要为变量赋值的数据, 来源于SQL中select语句的查询结果时, 可以使用select into完成变量的赋值.
一次性, 赋值多个变量:
函数内, 也可以使用
4流程控制–编程要素
循环和分支
4.1分支- IF
测试
结果
4.1.1内置分支函数: if()
不是分支, 是典型的三元运算, 的函数封装语法
MySQL不支持三元运算符 :.
4.2分支-CASE
测试
结果
4.3循环– while
条件满足, 则循环继续
其中标签, 用于在循环终止时, 一次性的终止多层循环! 类似于JS的语法.
例如:
4.4循环–终止
终止当前循环:(continue), iterate
终止全部:(break), leave
终止, 都需要配合循环语句的标签使用! ierate:
leave:
如果需要终止多层:
需要在后边跟随不同的标签即可
5过程–存储过程– procedure
与函数类似, 都是一段功能代码的集合, 称之为过程.
与函数不一样的是, 函数由于完成某个特定的操作点, 例如, md5(), 获取md5摘要信息, 不是用来实现某中也无路基操作, 而是就是实现特定的操作. 过程是, 某个特定的业务逻辑.
当我们需要使用SQL完成某件事时候, 使用过程, 而在过程的完成中, 需要一些特殊的操作, 就是函数.
例如:
需要插入, 1000条记录到某测试表中, 此时就应该创建过程.
而在插入的时候, 需要随机的获取学生的姓名, 就可以定义一个函数, 完成获取随机的学生姓名工作.
映射到PHP程序:
浏览器所请求的一个URL, 对应的PHP代码, 就是一段过程. (例如, 商品添加, 用户注册), 就是过程.
而在完成这个过程中, 需要将用户的密码做md5处理, md5就是函数.
因此, 函数在意的是处理结果,函数具有返回值.而过程是一段执行, 不具有返回值.
语法
5.1创建过程: create procedure
注意: 没有返回值参数有输入方式之分.
过程内的写法, 与函数是一致的.
5.2调用过程, call 过程()
过程的调用不能出现在表达式中, 需要使用独立的语法进行独立调用.
in: 由外向内传递
out: 由内向外传递
inout: 双向传递, 即可内向外, 也可外向内
内, 外, 指的是, 过程外和过程内.
创建过程外的三个变量:
以三个变量作为实参, 调用过程:
在获取过程外三个变量的值:
inout 双向传递, 类似于 PHP中的引用传递!
由于过程没有返回值, 需要在过程处理后, 得到过程的处理结果数据, 就因该, 使用带有out类型的参数.
一个数据时被多个过程连续处理, 典型的需要 inout类型的参数.
6练习
一个纯粹的MySQL管理员需要完成某些操作, 需要使用过程, MySQL自带的编程方式.例如, 需要创建大量的测试数据, 可以过程完成:
确定测试表的结构
确定需要插入的数据格式
要求:
学号要从1开始递增.
班级ID, 从1-100 随机
姓名, 随机得来
说明: 任意
编程实现:
编写, 需要的函数:
获取班级ID
生成名字:
生成信息
生成学号
从1开始递增
it-0000001
it-0000002
取得已有的最大学号.调用过程即可:
测试数据