mysql开发之---使用游标双层嵌套对总表进行拆分为帖子表和回复表_MySQL
注意点:
(1)进行拆分的总表表名是不同的,所以创建临时表,把总表的数据先插入临时表
(2)为了避免最外层游标轮询数据结束时,抛出 not found 退出程序,不会执行关闭游标等后续操作,定义continue handler, declare continue handler for not found set done1=1;
1.1、外部存储过程调用主存储过程
CREATE PROCEDURE `bbs_split_thread_post_outer`(IN `in_tabname` varchar(128)) BEGIN declare v_row_count int(11); declare v_sql varchar(200); -- 必须清空临时表bbs_fromask_importask_tmp select sysdate(); truncate table bbs_fromask_importask_tmp; set @sql=concat('insert into bbs_fromask_importask_tmp select * from ',in_tabname,';'); prepare stmt from @sql; execute stmt; call bbs_split_thread_post(); select sysdate(); END CREATE PROCEDURE `bbs_split_thread_post`() BEGIN declare v_source_count int(11); declare v_thread_pkid int(11); declare v_thread_pkid_uni_count int(11); declare done1,done2 int default 0; declare v_cur_thread_pkid cursor for select pkid,count(*) from bbs_fromask_importask_tmp group by pkid; declare continue handler for not found set done1=1; -- 清空临时表 truncate table pre_data_thread_tmp; truncate table pre_data_post_tmp; -- 判断原表是否有数据,没有什么也不做 select count(*) into v_source_count from bbs_fromask_importask_tmp; if v_source_count>0 then select ifnull(max(id),0) into @thread_max_id from yaolanbbs.pre_data_thread; -- 可做修改 select @thread_max_id; -- 打开游标 open v_cur_thread_pkid; repeat fetch v_cur_thread_pkid into v_thread_pkid,v_thread_pkid_uni_count; -- 每次fetch最大id自增1 if not done1 then set @thread_max_id=@thread_max_id+1; insert into pre_data_thread_tmp(id,title,age,rule,param) select @thread_max_id,t1.qtitle,t1.age,'age',t1.age from bbs_fromask_importask_tmp t1 where t1.pkid=v_thread_pkid limit 1; -- 根据pkid对一组数据进行处理 begin declare v_post_answer text; declare v_cur_post_record cursor for select t1.answer from bbs_fromask_importask_tmp t1 where t1.pkid=v_thread_pkid; declare exit handler for not found close v_cur_post_record; -- declare continue handler for not found set done2=1; insert into pre_data_post_tmp(tid,text,sort) select @thread_max_id,t1.qdesc,1 from bbs_fromask_importask_tmp t1 where t1.pkid=v_thread_pkid limit 1; set @sort=2; ######设置值 open v_cur_post_record; repeat fetch v_cur_post_record into v_post_answer; -- select @sort; -- select v_post_answer; insert into pre_data_post_tmp(tid,text,sort) values(@thread_max_id,v_post_answer,@sort); -- insert into testincre values(@sort,v_post_answer); set @sort=@sort+1; until 0 end repeat; -- select curdate(); 不会执行的原因,定义exit handler close v_cur_post_record; end; end if; until done1 end repeat; -- 关闭游标 close v_cur_thread_pkid; -- select curdate(); /*-- 导入最终表 insert into pre_data_thread(id,title,create_time,age,rule,param) select id,title,create_time,age,rule,param from pre_data_thread_tmp; insert into pre_data_post(tid,text,sort,create_time) select tid,text,sort,create_time from pre_data_post_tmp; */ end if; END
总结:
(1)30G内存没有负载的情况下,8488276行拆为两个表共10500000行用时39分钟

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Artikel ini meneroka mengoptimumkan penggunaan memori MySQL di Docker. Ia membincangkan teknik pemantauan (statistik Docker, skema prestasi, alat luaran) dan strategi konfigurasi. Ini termasuk had memori docker, swapping, dan cgroups, bersama -sama

Artikel ini menangani ralat "tidak dapat membuka perpustakaan kongsi" MySQL. Isu ini berpunca daripada ketidakupayaan MySQL untuk mencari perpustakaan bersama yang diperlukan (.so/.dll fail). Penyelesaian melibatkan mengesahkan pemasangan perpustakaan melalui pakej sistem m

Artikel ini membincangkan menggunakan pernyataan jadual Alter MySQL untuk mengubah suai jadual, termasuk menambah/menjatuhkan lajur, menamakan semula jadual/lajur, dan menukar jenis data lajur.

Artikel ini membandingkan memasang MySQL pada Linux secara langsung berbanding menggunakan bekas podman, dengan/tanpa phpmyadmin. Ia memperincikan langkah pemasangan untuk setiap kaedah, menekankan kelebihan Podman secara berasingan, mudah alih, dan kebolehulangan, tetapi juga

Artikel ini memberikan gambaran menyeluruh tentang SQLite, pangkalan data relasi tanpa server tanpa mandiri. Ia memperincikan kelebihan SQLITE (kesederhanaan, mudah alih, kemudahan penggunaan) dan kekurangan (batasan konkurensi, cabaran skalabiliti). C

Panduan ini menunjukkan pemasangan dan menguruskan pelbagai versi MySQL pada macOS menggunakan homebrew. Ia menekankan menggunakan homebrew untuk mengasingkan pemasangan, mencegah konflik. Pemasangan Butiran Artikel, Permulaan/Perhentian Perkhidmatan, dan PRA Terbaik

Artikel membincangkan mengkonfigurasi penyulitan SSL/TLS untuk MySQL, termasuk penjanaan sijil dan pengesahan. Isu utama menggunakan implikasi keselamatan sijil yang ditandatangani sendiri. [Kira-kira aksara: 159]

Artikel membincangkan alat MySQL GUI yang popular seperti MySQL Workbench dan PHPMyAdmin, membandingkan ciri dan kesesuaian mereka untuk pemula dan pengguna maju. [159 aksara]
