MySQL 拼接Insert批量同步异构表数据
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,需求:线上部分表数据需要同步到测试环境,但是测试环境表结构又有变更,额外添加需求:原线上和测试都有的表字段同步,其他不同的字段不用同步,置为NULL即可。 思路:首先导出线上表数据到测试的test库,
千家信息网最后更新 2024年11月26日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安全错误
数据库的锁怎样保障安全
拼接屏服务器
金属服务器与游戏平台结合
甘肃政法大学网络安全是一本
查看数据库表格的软件
pl sql链接不上数据库
服务器电脑能当正常办公电脑吗
软件开发是什么时候快速兴起的
松江区技术软件开发供应商家
梧桐网络技术诈骗
最新的网络安全漏洞数据分析
碧蓝档案服务器维修中
国家服务器
国际互联网主机服务器
软件开发毕设论文格式
爵极软件开发公司
角色数据库
尔雅数据库技术与应用答案
计算机软件开发方向
网络安全巡检日志管理
计算机网络技术文案短句
最适合改软路由的服务器
数据库服务器可以共用一个么
网络数据库选修论文
橙级上海网络技术有限公司
重庆企业软件开发平台
cbm数据库的查询方式
温州定制企业app软件开发
大连软件开发培训班多少钱
艾美仕数据库使用说明
软件开发专业专科院校