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

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. dotnet 使用增量源代码生成技术的 Telescope 库导出程序集类型

    本文将告诉大家在 dotnet 里面使用免费完全开源的基于增量源代码生成技术的 Telescope 库,进行收集导出项目程序集里面指定类型.可以实现性能极高的指定类型收集,方便多模块对接入自己的业务框 ...

  2. dotnet 根据基线包版本实现库版本兼容

    本文来告诉大家如何根据 基线包版本 的功能来实现自动在构建过程中,告诉开发者,当前版本是否存在不兼容旧版本的变更.其不兼容变更包括二进制中断变更和 API 不兼容变更和源代码中断变更.可以让库开发者花 ...

  3. WPF 用到的触摸的 COM 接口

    本文记录 WPF 用到的触摸的 COM 接口 消息 用到了 WM_TABLET_ADDED 和 WM_TABLET_DELETED 消息 使用的代码是 src\Microsoft.DotNet.Wpf ...

  4. Git实战技巧:恢复被强制push -f失踪的代码

    前言 Git是一个易学难精的分布式版本控制系统,被我们码农常用于代码的管理.如果你还不了解Git,建议先通过廖雪峰的Git教程进行了解,再来看本文,因为本文以使用技巧为主,不会在基础名词上做过多解释. ...

  5. FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频

    ​同步播放音视频的时候,<FFmpeg开发实战:从零基础到短视频上线>一书第10章的示例程序playsync.c采取一边遍历一边播放的方式,在源文件的音频流和视频流交错读取的情况下,该方式 ...

  6. 利用PostMan 模拟上传/下载文件

    我们经常用postman模拟各种http请求.但是有时候因为业务需要,我们需要测试上传下载功能.其实postman也是很好支持这两种操作的. 一.上传文件: 1.打开postman 选择对应reque ...

  7. TCP/IP协议栈及网络基础

    TCP/IP协议栈及网络基础 目录 TCP/IP协议栈及网络基础 1. TCP/IP协议栈及网络基础 1.1 OSI网络模型 1.2 TCP/IP网络模型 1.2.1 物理层 1.2.2 数据链路层 ...

  8. java如何将JSONObject转成实体对象

    import com.google.gson.Gson; import org.json.JSONObject; // ... JSONObject json = new JSONObject(&qu ...

  9. 在 WPF 中集成 ASP.NET Core 和 WebView2 用于集成 SPA 应用

    背景 我们有些工具在 Web 版中已经有了很好的实践,而在 WPF 中重新开发也是一种费时费力的操作,那么直接集成则是最省事省力的方法了. 修改项目文件 我们首先修改项目文件,让 WPF 项目可以包含 ...

  10. gpu机器没有开启ipv6

    参考: https://blog.csdn.net/asdfaa/article/details/137884414 检查系统是否支持 IPv6,查看被禁用了 在启用 IPv6 之前,首先要确保您的系 ...