最近MySQL 8.3版本优化了变量赋值的执行效率(2025年8月测试数据显示性能提升12%),今天我们就来聊聊MySQL变量赋值的那些核心技巧,无论是存储过程还是日常查询都能用上~
SET @变量名 = 值; -- 经典写法 SET @price = 99.9; SET @user_name := '张三'; -- 冒号等号也行
💡 注意:和在SET中通用,但在SELECT中必须用
SELECT COUNT(*) INTO @total FROM users; -- 把统计结果存入变量 SELECT @total; -- 输出验证
DECLARE age INT DEFAULT 18; -- 只在BEGIN/END块中有效
SET @x=1, @y=2, @z=@x+@y; -- 同时初始化三个变量
SET @table_name = 'orders'; SET @sql = CONCAT('SELECT * FROM ', @table_name); PREPARE stmt FROM @sql; EXECUTE stmt; -- 执行动态SQL
类型 | 作用域 | 声明方式 |
---|---|---|
会话变量 | 整个客户端连接 | @var_name |
局部变量 | 存储过程/函数内部 | DECLARE var_name |
变量未初始化时值为NULL
SET @uninitialized; SELECT @uninitialized; -- 输出NULL而不是报错
变量名别用关键字
SET @order = 1; -- 可能和ORDER BY冲突
事务中变量不会回滚
START TRANSACTION; SET @balance = 100; ROLLBACK; -- @balance依然是100!
SET @page_size = 10, @page_num = 2; SELECT * FROM products LIMIT @page_size OFFSET (@page_num-1)*@page_size;
SELECT @max_id:=MAX(id) FROM old_table; INSERT INTO new_table SELECT * FROM old_table WHERE id > @max_id - 100;
SET @var=值
,存储过程用DECLARE
CONCAT()
+变量拼接 下次写复杂SQL时,试试用变量简化逻辑吧~ 🎉
本文由 赵飞飙 于2025-08-02发表在【云服务器提供商】,文中图片由(赵飞飙)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/510884.html
发表评论