千家信息网

MySQL 拼接Insert批量同步异构表数据

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,需求:线上部分表数据需要同步到测试环境,但是测试环境表结构又有变更,额外添加需求:原线上和测试都有的表字段同步,其他不同的字段不用同步,置为NULL即可。 思路:首先导出线上表数据到测试的test库,
千家信息网最后更新 2026年11月01日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 ;
测试 同步 数据 字段 端的 方式 环境 目标 结构 需求 不同 上表 不用 信息 分表 工作量 思路 手动 数据库 过程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网科技集团 互联网中国科技 互联网金融 金融科技 喔噻互联网科技 银优互联网科技有限公司 友谊互联网络科技 人人互联网科技是培训 多迪互联网科技有限公司 中正互联网科技招聘 博兴的互联网电子科技公司 河南猎农互联网科技有限公司 苏州五指互联网络科技有限 辽宁互联网新科技 速维有品互联网信息科技(苏州)有限公司 云南省自由互联网科技有限公司 半导体是互联网高科技吗 有人说阿里系是互联网科技企业 江苏互联网科技小贷 互联网科技创业计划的风险分析 东风日产互联网科技公司叫什么 广州淘业互联网络科技 互联网科技有限公司图片 易通互联网络科技有限公司 卓越科技互联网 招聘 创业天下互联网科技有限公司 银川新华互联网科技学校联系电话 本届互联网博览会上的黑科技 互联网金融科技元年 国产互联网科技公司 银川新华互联网科技学校原画
0