MySQL 用户变量赋值、查询赋值、滚动赋值

        在MySQL中,用户变量是一种在会话级别存储和重用值的方式,它们以@符号开头。用户变量可以在查询中用来存储和传递数据,增强SQL脚本的功能性。

        定义和赋值用户变量用户变量可以直接在查询中定义并赋值,不需要预先声明。赋值可以使用SET语句或SELECT语句完成。使用SET语句

SET @myVar = 10; -- 赋予整数值
SET @message = 'Hello, World!'; -- 赋予字符串值
SET @today = CURRENT_DATE(); -- 赋予当前日期

SELECT @sum := SUM(column_name) FROM table_name; -- 计算某列总和并赋值给@sum
SELECT @last_id := LAST_INSERT_ID(); -- 获取最近插入行的自增ID并赋值

滚动递减赋值

set @points2 =: 3369;
select 100,1,-1,@points2,@points2=(@points2-1),sddm,sdmc, yxrq - INTERVAL 1 YEAR,yxrq ,create_time,create_by
from sys_sqsd
where tenant_id=100
order by yxrq asc 

注意事项

        用户变量的作用范围局限于创建它们的会话。当会话结束时,这些变量就会消失。

        在同一查询中,用户变量的赋值和使用顺序很重要,因为MySQL是从左到右解析查询的。

        当在SELECT语句中同时定义和使用用户变量时,需要注意MySQL的执行顺序可能会导致意料之外的结果,尤其是在涉及到多行处理时。

        使用用户变量可以提高复杂查询的可读性和灵活性,但过度依赖它们可能导致代码难以理解和维护。

### 实现 MySQL 变量递归赋值MySQL 中,虽然直接通过 SQL 语句实现复杂的递归逻辑并不被推荐[^1],但是可以利用 `WITH RECURSIVE` 结构来创建递归公用表表达式(CTE),从而间接完成某些形式的递归操作。对于变量的递归赋值,则更多依赖于存储过程中的编程控制流。 #### 使用 WITH RECURSIVE 进行简单数值累加示例 下面是一个简单的例子,展示如何使用 `WITH RECURSIVE` 来模拟一个整数序列的生成以及相应的累积求和: ```sql WITH RECURSIVE numbers AS ( SELECT 1 as num, CAST(1 AS CHAR) as sum_str UNION ALL SELECT num + 1, CONCAT(sum_str, ',', (num + 1)) FROM numbers WHERE num < 5 ) SELECT GROUP_CONCAT(num), sum_str FROM numbers; ``` 此查询会构建一个从1到5的数字列表及其对应的字符串表示形式,并最终返回这两个字段的内容作为结果集的一部分[^2]。 #### 存储过程中实现更复杂的递归逻辑 当涉及到更加复杂的业务场景时,建议采用存储过程的方式来处理递归问题。例如,在 MySQL 8 版本之后引入了对递归存储过程的支持,这允许开发者编写能够自我调用的过程体来进行深层次的数据遍历或计算[^3]。 这里给出一段伪代码样例用于说明如何在一个存储过程中执行带有条件判断的递归赋值: ```sql DELIMITER $$ CREATE PROCEDURE RecursiveAssignment(IN start INT, OUT result TEXT) BEGIN DECLARE current_value INT DEFAULT start; IF current_value <= 0 THEN SET result = 'Base case reached'; ELSE CALL RecursiveAssignment(current_value - 1, @temp_result); -- 假设我们希望将每次递归的结果拼接成逗号分隔的形式保存至result参数中 SET result = CONCAT(@temp_result, ',', current_value); END IF; END$$ DELIMITER ; ``` 上述代码片段展示了如何定义并调用一个名为 `RecursiveAssignment` 的存储过程,该过程接受两个输入/输出参数:一个是起始值 (`start`) ,另一个是用来接收最终结果(`result`) 。在这个过程中实现了基于给定初始值得减法运算直到达到基础情况为止,并在此期间不断更新输出参数 `result` 的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值