上万条甚至上百万数据进行迁出做备份或者进行不妨碍原系统数据的操作,现在很多企业都会用到,目前就需要将上百万条数据进行迁出到副表保存并操作,直接再后台写一个按钮进行操作,既方便操作也不会很慢。毕竟是客户需要,不能每次迁出都要客户去数据库操作,操作的不好那数据危险度挺高的。

1、分页查询数据库主表数据

2、分页写入数据库副表

两句话很简单,关键在于那个“分页”式操作,那这就开始我这上百万条的数据迁出作业 by user 悦悦 https://www.cnblogs.com/nuanai

前端肯定需要一个页面来显示这个操作按钮,html的页面布局不做多余解释(使用的框架是fastadmin)页面显示了运行到的每一页数据和运行结束后总页数

1 <p>当前页码:<span id="currentPage"></span></p>
2 <p>总页数:<span id="totalPage"></span></p>
3
4 <button type="button" id="qrBtntwo">迁出数据</button>

再来就是JS逻辑问题,html给这个按钮起了一个名字,那就对这个名字进行单击事件的触发  by user 悦悦 https://www.cnblogs.com/nuanai

需要注意的是我这边调用导入数据方法,使用的Controller调用方法,因为我使用的是fastadmin框架,正常根据自己所使用的的框架进行方法的调用就可以。

1 $(document).on("click", "#qrBtntwo", function () {
2 // 初始化页码和总页数
3 $('#currentPage').text(1);
4 $('#totalPage').text('正在导入...');
5
6 // 开始导入数据,默认是第一页
7 Controller.importProewm(1);
8 });

数据导入方法的编写,用到了ajax方法,也不过多解释,正常的结构传值,只要url路径写对即可(如果需要判定时间性操作,可以追加上时间点的判断和传值data),注意需要用到get传值当前页数page,因为下面返回需要继续调用

 1 importProewm:function(page){
2 $.ajax({
3 url: 'bwqr/Workflowhis/importproewm?page=' + page,
4 type: 'POST',
5 dataType: 'json',
6 success: function(res) {20 },
21 error: function(xhr, status, error) {
22 // 显示错误信息
23 alert('数据导入失败:' + error);
24 }
25 });
26 },

对于控制器的内容,就是每次读取数据库数据,按照分页进行读取后写入到副表中,然后将“页数”和"总页数"结果返回到JS中,里面使用到了事务的开启,如果出现错误可以很好的判断是哪一页出现了错误  by user 悦悦 https://www.cnblogs.com/nuanai

 1 public function importproewm(){
2
3 // 每页显示的数据量
4 $pageSize = 10;
5 // 获取当前页码
6 $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
7 // 查询原始表的数据总数
8 $query = Db::name('procedure');
9 $total = $query->count();
10 // 计算总页数
11 $totalPage = ceil($total / $pageSize);
12 // 开启事务
13 Db::startTrans();
14 try {
15 // 查询当前页的数据并插入到目标表
16 $data = $query->where(["deletetime"=>null,"status"=>'normal'])->limit($pageSize)->page($page)->select();
17 Db::name('procedure_his')->insertAll($data, true);//相同id的跳过
18
19 // 构建返回的JSON数据
20 $responseData = [
21 'currentPage' => $page,
22 'totalPage' => $totalPage
23 ];
24 // 提交事务
25 Db::commit();
26 } catch (\Exception $e) {
27 // 回滚事务
28 Db::rollback();
29 $this->error($e->getMessage());
30 // 返回错误信息
31 header('HTTP/1.1 500 Internal Server Error');
32 echo '数据导入失败:' . $e->getMessage();
33 }
34
35 $this->success('', null, $responseData);
36 }

JS循环调用importProewm方法即可:如果按照页数进行循环,就需要传入每一页的页数值,因此自己调用自己的时,需要传入页数值+1才可以实现页数循环;里面也进行了页数判断,如果没有了下一页,就会输出完成提示

 1 var response = res.data;
2 console.log(response);
3 // 更新当前页码和总页数
4 $('#currentPage').text(response.currentPage);
5 $('#totalPage').text(response.totalPage);
6
7 // 判断是否还有下一页数据
8 if (response.currentPage < response.totalPage) {
9 // 继续导入下一页数据
10 Controller.importProewm(response.currentPage + 1);
11 } else {
12 // 导入完成
13 $('#totalPage').text(response.totalPage + ' (导入完成)');
14 }

至此,从主表迁出到副表功能就结束了,总结其实就是合理对自己的调用。  by user 悦悦 https://www.cnblogs.com/nuanai

如果大家有更简单的主副表迁移 ,可以一起沟通。

php+sql后台实现从主表迁出至副表(数据超万条)的更多相关文章

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据 这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流 ...

  2. sql server编写通用脚本自动统计各表数据量心得

    工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...

  3. Sql Server 导入还有一个数据库中的表数据

    在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例.阐述一下: 1.打开SQL Server Management ...

  4. SQL级联删除——删除主表同时删除从表——同时删除具有主外键关系的表

    create table a(id  varchar(20) primary key,password varchar(20) not null) create table b(id int iden ...

  5. [原]用SQL比较两张结构完全相同的表数据

    前几天面试遇到一个比较有意思的问题,就是有两张结构完全相同的表A和B,但是这两张表属于不同的业务流程,经过一段时间后发现两张表的数据不能完全匹配,有可能A比B多,也可能B比A多,或者两种可能同时存在, ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(18)-权限管理系统-表数据

    系列目录 这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流程,免得大家后天雾里来雾里去首先我再解释一些表,SysUser和SysRole表不用解释了. SysRoleSys ...

  7. SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列

    表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback ...

  8. SQL Server 统计信息更新时采样百分比对数据预估准确性的影响

    为什么要写统计信息 最近看到园子里有人写统计信息,楼主也来凑热闹. 话说经常做数据库的,尤其是做开发的或者优化的,统计信息造成的性能问题应该说是司空见惯. 当然解决办法也并非一成不变,“一招鲜吃遍天” ...

  9. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  10. SQL Server高级内容之子查询和表链接

    1.子查询概念 (1)就是在查询的where子句中的判断依据是另一个查询的结果,如此就构成了一个外部的查询和一个内部的查询,这个内部的查询就是自查询. (2)自查询的分类 1)独立子查询 ->独 ...

随机推荐

  1. [ML] 机器学习的 7 步流程

    Gathering Data. Preparing that Data. Choosing a Model. Training. Evaluation. Hyperparameter Tuning. ...

  2. dotnet 部署 github 的 Action 进行持续集成

    被微软收购的 GitHub 现在十分土豪,提供了免费的服务器给咱构建.刚好微软对 dotnet 的支持是特别好的,毕竟还算半个自家的东西,大概只需要 3 分钟就可以在 github 上通过 Actio ...

  3. OpenAI未至,Open-Sora再度升级!已支持生成16秒720p视频

    Open-Sora 在开源社区悄悄更新了!现在支持长达 16 秒的视频生成,分辨率最高可达 720p,并且可以处理任何宽高比的文本到图像.文本到视频.图像到视频.视频到视频和无限长视频的生成需求.我们 ...

  4. Codeforces Round 917 (Div. 2)

    A. Least Product 存在 \(a[i] = 0\),\(min = 0\),不需要任何操作. 负数个数为偶数(包括0),\(min = 0\),把任意一个改为 \(0\). 负数个数为奇 ...

  5. Zeppelin未授权访问 getshell

    Zeppelin未授权访问 getshell 1.漏洞简介 Apache Zeppelin是一个让交互式数据分析变得可行的基于网页的notebook.Zeppelin提供了数据可视化的框架. Zepp ...

  6. 03. go-zero简介及如何学go-zero

    目录 一.go-zero简介及如何学go-zero 1.go-zero官方文档 2.go-zero微服务框架入门教程 3.go-zero最佳实践 4.学习资料 二.go-zero环境搭建 1.GO环境 ...

  7. Linux grep根据关键字匹配前后几行

    在Linux环境下,查看文件内容时,很多时候需要查看指定关键字的前后几行,如查看日志文件时,如果日志文件太大,想直接在Linux 终端中查看,可以grep 'partten' filename 进行过 ...

  8. MySQL如何快速获取binlog的开始时间和结束时间

    之前写过一篇文章MySQL如何获取binlog的开始时间和结束时间[1],文章里面介绍了如何获取MySQL数据库二进制日志(binlog)的开始时间与结束时间的一些方法.实际应用当中,我们可能还会遇到 ...

  9. CF933-Div3 大致思路+题解

    \(Rank\) A - Rudolf and the Ticket 纯水题 暴力枚举直接过 $code$ #include<bits/stdc++.h> #define fo(x,y,z ...

  10. NETCore中实现一个轻量无负担的极简任务调度ScheduleTask

    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...