共计 2074 个字符,预计需要花费 6 分钟才能阅读完成。
Mysql 查询数据,并且再分表插入数据
直接上代码:有用请支持一下:
drop procedure if exists insertt;
delimiter $$
create procedure insertt()
begin
declare a int default 1000;
declare flag int default 0;
declare article_id int(10);
declare s_list cursor for SELECT `id` as "article_id" FROM `div_article` ORDER BY `id` ASC LIMIT 0,1;
declare continue handler for not found set flag=1;
open s_list;
fetch s_list into article_id;
while flag 1 do
set @tid = article_id%1000;
set @tname = CONCAT('`div_test',@tid,'`');
set @article_id = article_id;
set @title = (SELECT title FROM `div_article` WHERE id = @article_id) ;
set @sqlStr= CONCAT('INSERT INTO',@tname,'(`id`,`title`) VALUES (',@article_id,',"',@title,'")');
PREPARE stmt from @sqlStr;
EXECUTE stmt;
fetch s_list into article_id;
end while;
close s_list;
end$$
delimiter;
call insertt();
示例二
以下是一个 MySQL 存储过程的示例,该存储过程查询数据并将其分表插入到其他表中:、
DELIMITER //
CREATE PROCEDURE insert_data_to_partition()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE employee_name VARCHAR(255);
DECLARE employee_age INT;
DECLARE cur CURSOR FOR SELECT name, age FROM employees;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO employee_name, employee_age;
IF done THEN
LEAVE read_loop;
END IF;
-- 根据年龄范围选择要插入的目标表
IF employee_age = 25 AND employee_age 这个示例存储过程首先声明了一些变量用于迭代查询结果集,并设置了一个游标(`cur`)来执行查询操作。然后,使用 `OPEN` 语句打开游标,准备从 `employees` 表中检索数据。
`FETCH` 语句在每次循环迭代中获取下一行数据,并将它们存储到声明的变量中(`employee_name` 和 `employee_age`)。如果没有更多的数据可获取,则设置 `done` 变量为 `TRUE` 并跳出循环。
根据员工的年龄范围,使用条件语句选择要插入数据的目标表。根据示例,将年龄小于 25 岁的员工插入到 `employees_25` 表中,将年龄在 25 到 40 岁之间的员工插入到 `employees_40` 表中,将年龄大于等于 40 岁的员工插入到 `employees_40plus` 表中。
最后,关闭游标并结束存储过程定义。
要执行这个存储过程,您可以使用以下 SQL 语句:
CALL insert_data_to_partition();
请注意,这只是一个示例存储过程,您可能需要根据自己的实际需求进行适当的修改和调整。
文章来源:https://www.toymoban.com/diary/sql/220.html
文章来源地址 https://www.toymoban.com/diary/sql/220.html
到此这篇关于 Mysql 查询数据,并且分表再插入数据,储存过程源码解析的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!
原文地址:https://www.toymoban.com/diary/sql/220.html
如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!