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 THEN INSERT INTO employees_25 (name, age) VALUES (employee_name, employee_age); ELSEIF employee_age >= 25 AND employee_age < 40 THEN INSERT INTO employees_40 (name, age) VALUES (employee_name, employee_age); ELSE INSERT INTO employees_40plus (name, age) VALUES (employee_name, employee_age); END IF; END LOOP; CLOSE cur; END // DELIMITER ;
这个示例存储过程首先声明了一些变量用于迭代查询结果集,并设置了一个游标(`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模板网!