深入学习mysql存储过程
Posted 张文琪2022
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入学习mysql存储过程相关的知识,希望对你有一定的参考价值。
这里的存储过程都是通过sql语句实现的,用来练习的表结构:
CREATE TABLE `test` (
`id` varchar(10) NOT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
代码一、基本结构
DROP PROCEDURE IF EXISTS test;#如存在同名存储过程则删除
CREATE PROCEDURE test()
BEGIN#开始标识
declare _count int DEFAULT 0;
#声明变量,建议变量名可用下划线开头不容易出错
SELECT count(1) INTO _count FROM test;
#查找数据并存入变量
SELECT _count;#输出变量
END#结束标识
代码二:循环读取数据
DROP PROCEDURE IF EXISTS test;#dsad
CREATE PROCEDURE test()
BEGIN
declare done int default false;
declare _id VARCHAR(10);
declare _name VARCHAR(50);
declare _cur cursor for (SELECT * FROM test);
#声明游标变量
declare continue HANDLER for not found set done = true;
#更新退出循环条件
open _cur;#打开游标
loop1:loop#开始循环
fetch _cur into _id,_name;#赋值
if done then #退出
leave loop1;
end if;
SELECT _id,_name;
end loop loop1;
END
代码三:新增数据
DROP PROCEDURE IF EXISTS test;
CREATE PROCEDURE test(IN _id VARCHAR(10),IN _name VARCHAR(50))
BEGIN
declare _count int DEFAULT 0;
SELECT count(1) into _count FROM test WHERE ID = _id;
IF _count <> 0 then
SELECT "该ID已存在";
ELSE
INSERT INTO test VALUES(_id,_name);
COMMIT;
END IF;
END
代码四:存储过程之间的调用(代码三的改编)
DROP PROCEDURE IF EXISTS _save;
CREATE PROCEDURE _save(IN _id VARCHAR(10),IN _name VARCHAR(50))
BEGIN
INSERT INTO test VALUES(_id,_name);
COMMIT;
END
DROP PROCEDURE IF EXISTS test;
CREATE PROCEDURE test(IN _id VARCHAR(10),IN _name VARCHAR(50))
BEGIN
declare _count int DEFAULT 0;
SELECT count(1) into _count FROM test WHERE ID = _id;
IF _count <> 0 then
SELECT "该ID已存在";
ELSE
CALL _save(_id,_name);
END IF;
END
以上是关于深入学习mysql存储过程的主要内容,如果未能解决你的问题,请参考以下文章