MySQL高级教程笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

取得已有的最大学号.调用过程即可:

测试数据

相关文档
最新文档