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 ;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-2142553/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL異構資料同步–tair為例MySqlAI
- Kettle:Oracle多表格批量同步資料=》mysqlOracleMySql
- Oracle批量插入資料insert all into用法Oracle
- 異構資料來源同步之資料同步 → DataX 使用細節
- 異構資料庫間批量表快速複製資料庫
- 海量資料遷移之分割槽表批量insert效能改進
- 批量修改Mysql資料庫表Innodb為MyISANMySql資料庫
- 異構資料來源同步之資料同步 → datax 改造,有點意思
- 異構資料來源同步之表結構同步 → 透過 jdbc 實現,沒那麼簡單JDBC
- SQL Server Bulk Insert批量資料匯入SQLServer
- MySQL批量Insert應用ON DUPLICATE KEY UPDATEMySql
- Golang 針對 MySQL 資料庫表結構的差異 SQL 工具GolangMySql資料庫
- wdcp環境innodb結構mysql資料庫表異常需要重建MySql資料庫
- Mysql匯出表結構、表資料MySql
- SQL Server 批量生成資料庫內多個表的表結構SQLServer資料庫
- 【MySQL】批量刪除mysql中資料庫中的表MySql資料庫
- 資料遷移(1)——通過資料泵表結構批量遷移
- 利用MySQL原資料資訊批量轉換指定庫資料表生成Hive建表語句MySqlHive
- Oracle GoldenGate 異構平臺同步(Mysql到Oracle)OracleGoMySql
- 大表資料插入批量提交
- mysql表結構同步工具SchemaSync使用初探MySql
- Mysql批量大資料獲取MySql大資料
- Ibatis批量更新資料(mysql資料庫)BATMySql資料庫
- mysql複製表結構和資料MySql
- MySQL 對比資料庫表結構MySql資料庫
- MySQL InnoDB表--BTree基本資料結構MySql資料結構
- clickhouse 同步mysql資料MySql
- Flink CDC 系列 - 同步 MySQL 分庫分表,構建 Iceberg 實時資料湖MySql
- ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步資料庫
- OGG 表結構變化導致同步異常
- Mysql主主同步-配置資料同步MySql
- Mysql匯出表結構及表資料 mysqldump用法MySql
- goldengate同步中更改資料表結構維護Go
- EOS 區塊鏈資料實時異構到 MySQL區塊鏈MySql
- Linux下配置ORACLE-MYSQL 資料庫異構LinuxOracleMySql資料庫
- 異源資料同步 → 如何獲取 DataX 已同步資料量?
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- MySQL:JDBC批量插入資料的效率MySqlJDBC