文章目的:
本文旨在记录存储过程的学习过程,便于以后的回顾。
学习目标:
创建一个统计数据库里每个表对应数据的存储过程
需要具备的知识:
1.mysql的SQL语句
sql语句
2.mysql 存储过程
存储过程
3.mysql 游标(cursor)
游标
4.mysql information_schema数据库
information_schema表
5.mysql 预编译 prepare from ; execute
prepare语句
6.mysql 函数和流程控制
mysql函数和运算符
7.表准备(tnum)
学习内容:
1、 创建一个统计数据库里每个表对应数据的存储过程学习时间:
日期:2021-07-29学习产出:
提示:这里统计学习计划的总量
例如:
1、 技术笔记 1 遍
2、CSDN 技术博客 1 篇
学习步骤:
1.存储日志运行代码
-- 存在删除
DROP PROCEDURE if EXISTS test_29Demo;
-- 创建存储过程
CREATE PROCEDURE test_29Demo()
BEGIN
-- 数据定义
DECLARE v_count INT;
DECLARE v_table_name VARCHAR(20);
DECLARE done int DEFAULT FALSE;
DECLARE sql_start VARCHAR(100);
-- 游标定义
DECLARE v_table CURSOR FOR SELECT table_name FROM information_schema.`COLUMNS` where table_schema ='test0010' AND table_name not like 'tnum' GROUP BY table_name ORDER BY table_name;
DECLARE CONTINUE HANDLER for NOT found set done =TRUE;
-- 删除原数据
DELETE FROM tnum;
COMMIT;
-- 开启游标
OPEN v_table;
-- 循环
v_start:loop
-- 注入数据
FETCH v_table INTO v_table_name;
IF done THEN
LEAVE v_start;
END if;
-- 预编译
SET sql_start = CONCAT('select count(*) into @count from ',v_table_name);
set @sql = sql_start;
PREPARE s FROM @sql;
EXECUTE s;
-- 清理缓存
DEALLOCATE PREPARE s;
-- 传值
SET v_count = @count;
-- 插入结果
INSERT into tnum(id,name,num) VALUES(null,v_table_name,v_count);
-- 关闭
END loop;
close v_table;
END
2.存储日志调用
-- 调用
CALL test_29Demo();
3.运行结果
学习总结:
至此,一个较为复杂的存储过程已经完成,存储过程篇完结,以后就需要根据业务实际需求添加内容,继续熟练。