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

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

2、分页写入数据库副表

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

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

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

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

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

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

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

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

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

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

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

  1. 1 var response = res.data;
  2. 2 console.log(response);
  3. 3 // 更新当前页码和总页数
  4. 4 $('#currentPage').text(response.currentPage);
  5. 5 $('#totalPage').text(response.totalPage);
  6. 6
  7. 7 // 判断是否还有下一页数据
  8. 8 if (response.currentPage < response.totalPage) {
  9. 9 // 继续导入下一页数据
  10. 10 Controller.importProewm(response.currentPage + 1);
  11. 11 } else {
  12. 12 // 导入完成
  13. 13 $('#totalPage').text(response.totalPage + ' (导入完成)');
  14. 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. [Blockchain] Cosmos Starport 安装的三种方式

    官方二进制包方式: # 下载 starport 二进制到 /usr/local/bin $ curl https://get.starport.network/starport! | bash   # ...

  2. [FAQ] Python list 的值是带有小括号的是什么意思 ?

    python 中的 list 即列表,是用中括号 [ ] 表示的数组列表: dict 即字典,是用花括号 { } 表示的 json 对象: tuple 即元祖,是用小括号表示的序列: 见到它们之间的组 ...

  3. 2019-10-31-win10-uwp-录制任意应用屏幕

    title author date CreateTime categories win10 uwp 录制任意应用屏幕 lindexi 2019-10-31 09:10:38 +0800 2019-10 ...

  4. EPAI手绘建模APP资源管理和模型编辑器2

    g) 矩形   图 26模型编辑器-矩形 i. 修改矩形的中心位置. ii. 修改矩形的长度和宽度. h) 正多边形 图 27模型编辑器-内接正多边形 图 28模型编辑器-外切正多边形 i. 修改正多 ...

  5. CF916E 换根树上问题

    Link 题意:对一棵树进行三种操作. 把根设为 \(x\). 将以 \(lca(y, z)\) 为根的子树中所有点的权值加 \(v\). 查询以 \(x\) 为根的子树点权之和. 初始根为 \(1\ ...

  6. 本地git用cmd窗口提交时编辑模式退出问题

    git commit后输入提交描述. 输入完成后按Esc (退出编辑状态),接着连按两次大写字母Z,就保存好退出了.

  7. python3使用dpkt生成PCMA格式rtp流

    操作系统 :CentOS 7.6_x64 Python版本:3.9.12 dpkt版本:1.9.8 PCMA编码是VoIP通信中常见的格式,今天整理下CentOS7环境下,python3如何使用dpk ...

  8. Unity热更学习笔记--AB包的依赖 0.98

    AB包的依赖 接上一小结. 在这里我们新建一个红色材质球,赋值给Cube预制体.此时不对材质球进行AB包分类,再次进行打包.运行脚本,发现红色cube成功的从AB包中加载出来.尽管我们没有将cube所 ...

  9. 使用小波分析和深度学习对心电图 (ECG) 进行分类 mcu-ai低成本方案 mcu-ai低成本方案

    具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 此示例说明如何使用连续小波变换 (CWT) 和深度卷积神经网络 (CNN) 对人体心电图 (EC ...

  10. Golang 爬虫02

    验证邮箱 目标站点: https://movie.douban.com/top250