MYSQL 系列 -存储过程

之前的个人整理、记录

查看数据库中所有的存储过程:

SHOW PROCEDURE STATUS WHERE Db='db_name'

1:创建一个最简单的存储过程

CREATE PROCEDURE pro1()
BEGIN
SELECT * FROM person_copy;
END

调用:

CALL pro1();

2:带输入参数和输出参数的存储过程

CREATE  PROCEDURE pro2
(
 in _id INT,
 in _name VARCHAR(10),
OUT _age INT
)
BEGIN
SELECT age FROM person_copy WHERE id=_id AND `name`=_name;
END

调用

CALL pro2(1,'yzm',@age);

3:存贮过程中的循环体 whlie… do

CREATE PROCEDURE pro3
(
 _name VARCHAR(10),
_age INT
)
BEGIN
DECLARE i INT;
SET i=0;
WHILE i<3
DO
INSERT INTO person_copy VALUES (NULL,_name,_age);
SET i=i+1;
END WHILE;
END

调用就会执行SQL语句插入数据。
执行后,插入了3条数据。

4:存贮过程中的循环体 LOOP……END LOOP

CREATE PROCEDURE pro4
(
 _name VARCHAR(10),
_age INT
)
BEGIN
DECLARE i INT DEFAULT 0;
looplabel:LOOP
INSERT INTO person_copy VALUES(NULL,_name,_age);
SET i=i+1;
IF i>2 THEN
LEAVE looplabel;
END IF;
END LOOP;
END

执行后,插入了3条数据。

5:复杂存储过程带游标

CREATE PROCEDURE pro5
(
 _name VARCHAR(10)
)
BEGIN
DECLARE i INT DEFAULT 0;
looplabel:LOOP
IF i=3 THEN
SET i=i+1;
ITERATE looplabel;
END IF;
INSERT INTO person_copy VALUES (NULL,_name,i);
SET i=i+1;
IF i>=5 THEN
LEAVE looplabel;
END IF;
END LOOP;
END

让我们来看看这个存储过程的过程。

iterate语句类似于continue。结束当前循环进行下一次循环。
首先i的值为0,条件判断语句if i=3 then判断为假,跳过if语段,执行插入语句。然后继续往下走,执行i+1,if i>=5 then判断也为假,也跳过,继续循环,同理1和2再继续插入两次。在i=3的时候,条件判断语句if i=3 then判断为真,执行i=i+1,i值为4,然后执行迭代 ITERATE looplabel,然后此时语句跳到if i=3 then判断语句,执行判断,这个时候由于i=4,if i=3 then判断为假,跳过IF语段,执行插入语句。继续往下走,将i+1,i变为5,条件判断if i>=5 then判断为真,执行LEAVE looplabel跳出loop循环,然后执行end;结束整个存储过程。

执行调用

CALL pro5('youbiao')

看看结果
在这里插入图片描述
6:进阶存储过程运用:清理表数据条数。

CREATE PROCEDURE  pro6()
BEGIN
SET @count=(SELECT COUNT(*) FROM person_copy);
IF (@count>10)
THEN
SET @delete_id=(SELECT id FROM person_copy ORDER BY id DESC LIMIT 10,1);
    DELETE FROM person_copy WHERE id<=@delete_id;
END IF;
END

查询表条数,如果表条数大于10条,就清理,只保留最新的十条数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangzm996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值