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;
posted @ 2022-01-22 20:17  一只小白的进修路  阅读(472)  评论(0编辑  收藏  举报