From a5049ff01778c4c9b53f80bbd07a3990830a6b24 Mon Sep 17 00:00:00 2001 From: pengshiyu <1940607002@qq.com> Date: Mon, 11 Apr 2022 22:37:09 +0800 Subject: [PATCH] fix --- blog/php-mysql/sql-function.md | 67 ++++++++++++++++++++++++++++++++- blog/php-mysql/sql-variables.md | 57 ++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) diff --git a/blog/php-mysql/sql-function.md b/blog/php-mysql/sql-function.md index f02c032..3412191 100644 --- a/blog/php-mysql/sql-function.md +++ b/blog/php-mysql/sql-function.md @@ -284,4 +284,69 @@ drop function my_func1; select 字段 into @变量; ``` -https://www.bilibili.com/video/BV1Vx411g7uJ?p=70&spm_id_from=pageDriver +## 3、函数流程结构案例 + +需求: + +从1开始,直到用户传入的对应的值位置,自动求和,凡是5的倍数都不要 + + +设计: + +1. 创建函数 +2. 需要一个形参,确定要累加到什么位置 +3. 需要定义一个变量来保存对应的结果 +4. 内容部需要一个循环来实现迭代累加 +5. 循环内部需要进行条件判断控制,5的倍数 + + +定义函数 + +```sql +-- 创建一个自动求和的函数 + +-- 修改语句结束符 +delimiter $$ + +-- 创建函数 +create function my_sum(end_value int) returns int +begin + -- 声明局部变量 + declare res int default 0; + declare i int default 0; + + -- 循环处理 + mywhile: while i <= end_value do + -- mysql中没有++ + set i = i + 1; + + -- 判断当前数据是否合理 + if i % 5 = 0 then + iterate mywhile; + end if; + + -- 修改变量,累加 + set res = res + i; + end while; + + -- 返回值 + return res; +end + +-- 结束 +$$ + +-- 修改语句结束符 +delimiter ; + +``` + +调用函数 + +```sql +-- 实参个数必须等于形参个数 +select my_sum(10); +``` + + +https://www.bilibili.com/video/BV1Vx411g7uJ?p=72&spm_id_from=pageDriver \ No newline at end of file diff --git a/blog/php-mysql/sql-variables.md b/blog/php-mysql/sql-variables.md index 72168da..bc7c4d4 100644 --- a/blog/php-mysql/sql-variables.md +++ b/blog/php-mysql/sql-variables.md @@ -134,3 +134,60 @@ mysql> select @name, @age; ```sql declare 变量名 数据类型 [属性]; ``` + +## 4、变量作用域 + +变量能够使用的区域范围 + +### 4.1、局部作用域 + +declare 关键字声明 (结构体中使用:函数/存储过程/触发器) + +declare关键字声明的变量没有任何符号修饰,就是普通字符串,如果再外部访问该变量,系统会自动认为是字段 + +### 4.2、会话作用域 + +用户定义的,使用@符号定义的变量,使用set关键字 + +会话作用域,当次连接有效只要再本连接中,任何地方都可以使用(可以在结构内容,也可以跨库) + +会话变量可以再函数内部使用 + +```sql +set @name = '张三'; + +create function get_name() returns char(4) +return @name; + +select get_name(); ++------------+ +| get_name() | ++------------+ +| 张三 | ++------------+ +``` + + +会话变量可以跨库 + +```sql +use mydatabase2; + +mysql> select @name; ++--------+ +| @name | ++--------+ +| 张三 | ++--------+ +``` + +### 4.3、全局作用域 + +所有的客户端,所有的连接都有效,需要使用全局符号来定义 + +```sql +set global 变量名 = 值; +set @@global.变量名 = 值; +``` + +通常,在sql编程的时候,不会使用自定义变量来控制全局,一般定义会话变量或者结构中使用局部变量来解决问题 -- GitLab