mysql中的变量和存储过程 编辑

1. 全局变量

全局变量可以直接使用,不用声明。全局变量前必须加 @

1.1 赋值全局变量

复制
-- 可以被赋值成任何类型
SET @var = XXX
-- 通过 into 赋值,(查询出来的结果必须只有零到一行,列的个数需要和变量个数相同)
SELECT a,b FROM tableName where id = 1 INTO @var1,@var2

1.2 使用全局变量

复制SELECT @变量名

2. 存储过程

0. 前奏

复制
-- 将;结束符替换为 $$
DELIMITER $$

0.0 结尾

复制
-- 将结束符换回 ;
DELIMITER ;

1. 创建存储过程

复制
-- end后面跟 $$ 是因为前面修改了结束符
create procedure 存储过程名字 (参数列表)
begin
方法体;
end $$
-- 参数列表(可以定义多个,之间用,分隔开):
-- IN 代表传入一个变量,在存储过程中修改该变量的值,外部的这个变量也不会被修改
-- OUT 代表修改从外部传入的这个变量的值
-- INOUT 结合IN和OUT
-- 例如 : IN idx INT
-- 例如 : OUT `name` VARCHAR(255)
(IN|OUT|INOUT) 参数名字 类型

2. 操作变量

使用变量,直接使用即可

复制select * from id = idx

赋值变量

复制
-- 可以被赋值成任何类型(因为mysql会自动类型转换,但是赋值尽量要符合类型)
SET idx = XXX
-- 通过 into 赋值,(查询出来的结果必须只有零到一行,列的个数需要和变量个数相同)
SELECT a,b FROM tableName where id = 1 INTO idx,`name`

3. 操作存储过程

复制
-- 调用存储过程,参数列表中IN类似可以传递数值和变量,OUT和INOUT只能传递全局变量
call 存储过程名(参数列表)
-- 查看所有的存储过程
select procedure status;
-- 查看 存储过程创建的语句
show create procedure 存储过程名;
-- 删除 存储过程
drop procedure 存储过程名
drop procedure if exists 存储过程名 -- 如果存在就删除,不存在就不删除

4. 方法体

方法体中可以写sql语句

4.1 声明局部变量,使用default来赋默认值

复制
-- declare 变量名 类型
declare c int;
declare address varchar(128) default 'Asia/Shanghai';

4.2 赋值局部变量

复制-- set 方式和 into 方式

4.3 if语句

复制
if 判断条件 then
方法体
elseif 判断条件 then
方法体
else
方法体
end if

4.4 循环

复制
-- while循环
while 循环条件 do
方法体
end while
-- do..while循环
repeat
方法体
until v_i >= 5 end repeat;
-- 死循环
loop
方法体
end loop
-- * 跳出循环,在循环前加上标识,end 循环结尾加上标识 ,内部使用 leave 标识 跳出循环(break) , 也可以使用 iterate 标识 开启下一次循环(continue)
-- 例子
look:loop
if XXX then
leave look;
end if
end loop look;

5. 技巧

5.1 设置语句错误自动回滚

复制
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION;
# TODO...
if t_error = 1 then
rollback;
else
commit;
end if;


作者:c21cw
出处:https://www.cnblogs.com/c21w/

如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的关注我

如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请            .
posted @   一只小白的进修路  阅读(480)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示