Mysql 查詢數(shù)據(jù),并且再分表插入數(shù)據(jù)
直接上代碼:有用請支持一下:
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存儲過程的示例,該存儲過程查詢數(shù)據(jù)并將其分表插入到其他表中:、
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; -- 根據(jù)年齡范圍選擇要插入的目標(biāo)表 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 ;
這個示例存儲過程首先聲明了一些變量用于迭代查詢結(jié)果集,并設(shè)置了一個游標(biāo)(`cur`)來執(zhí)行查詢操作。然后,使用`OPEN`語句打開游標(biāo),準(zhǔn)備從`employees`表中檢索數(shù)據(jù)。
`FETCH`語句在每次循環(huán)迭代中獲取下一行數(shù)據(jù),并將它們存儲到聲明的變量中(`employee_name`和`employee_age`)。如果沒有更多的數(shù)據(jù)可獲取,則設(shè)置`done`變量為`TRUE`并跳出循環(huán)。
根據(jù)員工的年齡范圍,使用條件語句選擇要插入數(shù)據(jù)的目標(biāo)表。根據(jù)示例,將年齡小于25歲的員工插入到`employees_25`表中,將年齡在25到40歲之間的員工插入到`employees_40`表中,將年齡大于等于40歲的員工插入到`employees_40plus`表中。
最后,關(guān)閉游標(biāo)并結(jié)束存儲過程定義。
要執(zhí)行這個存儲過程,您可以使用以下SQL語句:
CALL insert_data_to_partition();
請注意,這只是一個示例存儲過程,您可能需要根據(jù)自己的實際需求進行適當(dāng)?shù)男薷暮驼{(diào)整。
文章來源:http://www.zghlxwxcb.cn/article/220.html
文章來源地址http://www.zghlxwxcb.cn/article/220.html
到此這篇關(guān)于Mysql查詢數(shù)據(jù),并且分表再插入數(shù)據(jù),儲存過程源碼解析的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!