MySQL 拼接Insert批量同步异构表数据
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,需求:线上部分表数据需要同步到测试环境,但是测试环境表结构又有变更,额外添加需求:原线上和测试都有的表字段同步,其他不同的字段不用同步,置为NULL即可。 思路:首先导出线上表数据到测试的test库,
千家信息网最后更新 2025年01月31日MySQL 拼接Insert批量同步异构表数据需求:线上部分表数据需要同步到测试环境,但是测试环境表结构又有变更,额外添加需求:原线上和测试都有的表字段同步,其他不同的字段不用同步,置为NULL即可。 思路:首先导出线上表数据到测试的test库,考虑到两边表结构有变更,只能使用insert tab1(xx,xx) select xx,xx from tab1的方式插入,表比较多,手动对比所有字段工作量比较大,准备采用SQL拼接的方式拼接出插入的SQL去执行 实现过程: 1、将目标端要同步的数据库导入到测试端的test下面 2、创建同步信息表,并整理对应关系插入数据: CREATE TABLE `z_tab_sync` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `from_db` VARCHAR(100) DEFAULT NULL, `from_tab` VARCHAR(100) DEFAULT NULL, `to_db` VARCHAR(100) DEFAULT NULL, `to_tab` VARCHAR(100) DEFAULT NULL, KEY `id` (`id`) ) ENGINE=INNODB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8
其中from_tab是目标端的表,to_tab是测试端的表 id from_db from_tab to_db to_tab ------ ------- --------------------- ---------- ------------------------- 1 test business_history tenancy_db business_history 2 test data_number tenancy_db data_number 3 test house tenancy_db house 4 test house_process tenancy_db house_process 5 test landlord tenancy_db landlord 6 test landlord_process tenancy_db landlord_process 7 test order_info tenancy_db decorate_order_info 8 test order_process tenancy_db decorate_order_process 9 test payment_record_stream tenancy_db decorate_payment_record 10 test repayment_plan tenancy_db decorate_repayment_plan 11 test shop_area tenancy_db shop_area
使用如下SQL拼接出要执行的SQL SELECT CONCAT('insert into `',b.to_tab,'`(',GROUP_CONCAT(CONCAT('`',a.column_name,'`')),') select ',GROUP_CONCAT(CONCAT('`',a.column_name,'`')),' from ',a.from_tab,';') FROM ( SELECT ts.id, ts.from_tab, cl.column_name FROM information_schema.`COLUMNS` cl LEFT JOIN test.`z_tab_sync` ts ON cl.table_name = ts.from_tab WHERE table_schema = 'test' AND ts.id IS NOT NULL ) a, ( SELECT ts.id, ts.to_tab, cl.column_name FROM information_schema.`COLUMNS` cl LEFT JOIN test.`z_tab_sync` ts ON cl.table_name = ts.to_tab WHERE table_schema = 'tenancy_db' AND ts.id IS NOT NULL ) b WHERE a.id = b.id AND a.column_name = b.column_name GROUP BY a.id;
得到的SQL形如 INSERT INTO `business_history` ( `settlementId`, `businessType`, `updateTime`, `status`, `createTime`, `id` ) SELECT `settlementId`, `businessType`, `updateTime`, `status`, `createTime`, `id` FROM business_history ;
其中from_tab是目标端的表,to_tab是测试端的表 id from_db from_tab to_db to_tab ------ ------- --------------------- ---------- ------------------------- 1 test business_history tenancy_db business_history 2 test data_number tenancy_db data_number 3 test house tenancy_db house 4 test house_process tenancy_db house_process 5 test landlord tenancy_db landlord 6 test landlord_process tenancy_db landlord_process 7 test order_info tenancy_db decorate_order_info 8 test order_process tenancy_db decorate_order_process 9 test payment_record_stream tenancy_db decorate_payment_record 10 test repayment_plan tenancy_db decorate_repayment_plan 11 test shop_area tenancy_db shop_area
使用如下SQL拼接出要执行的SQL SELECT CONCAT('insert into `',b.to_tab,'`(',GROUP_CONCAT(CONCAT('`',a.column_name,'`')),') select ',GROUP_CONCAT(CONCAT('`',a.column_name,'`')),' from ',a.from_tab,';') FROM ( SELECT ts.id, ts.from_tab, cl.column_name FROM information_schema.`COLUMNS` cl LEFT JOIN test.`z_tab_sync` ts ON cl.table_name = ts.from_tab WHERE table_schema = 'test' AND ts.id IS NOT NULL ) a, ( SELECT ts.id, ts.to_tab, cl.column_name FROM information_schema.`COLUMNS` cl LEFT JOIN test.`z_tab_sync` ts ON cl.table_name = ts.to_tab WHERE table_schema = 'tenancy_db' AND ts.id IS NOT NULL ) b WHERE a.id = b.id AND a.column_name = b.column_name GROUP BY a.id;
得到的SQL形如 INSERT INTO `business_history` ( `settlementId`, `businessType`, `updateTime`, `status`, `createTime`, `id` ) SELECT `settlementId`, `businessType`, `updateTime`, `status`, `createTime`, `id` FROM business_history ;
测试
同步
数据
字段
端的
方式
环境
目标
结构
需求
不同
上表
不用
信息
分表
工作量
思路
手动
数据库
过程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技发展里程
数据库有没有布尔值
ps5哪个服务器比较便宜
软件开发遵循标准国标
邮件网络安全标语
网络安全ak是什么意思
计算机网络技术监狱信息管理专业
软件开发文档排版公众号
数据库模拟考核方案
嵌入式linux服务器
单片机用什么触摸屏软件开发
微信软件开发协议书范本
天津光瑞互联网科技有限公司
旅游团数据库
冯耀宗服务器
软件开发费收入指标
才正软件开发有限公司
图数据库 选型
三级网络技术在线模拟系统
延津网络安全宣传
安装数据库高高挂起
福山软件开发价格
音频可视化软件开发
sdn 网络安全
南通易捷网络技术有限公司
网络安全防范与应急措施
数据库基础书籍
大成邮箱服务器
眼镜行业软件开发哪个好用
安庆餐饮软件开发定制