背景:
項目初期使用的配置庫和業務庫兩種數據庫並行,所有配置數據位於配置庫,所有業務數據根據不同省份位於不同數據庫。由於使用省份越來越多,各省的配置數據也越來越多導致配置庫的數據量過於龐大,各省共用一個配置庫數據,僅依靠省份編碼去區分,查詢一個簡單配置數據需要耗費200ms。因此項目組提出配置庫分離方案,將原有配置庫數據拆分到各個省業務庫中,由於代碼中大部分會根據省份編碼判斷,因此業務庫中的碼表依舊需要省份編碼字段。針對全網需求,如果涉及到配置數據,這樣就需要提供31個省的數據腳本,這31個省的數據腳本可能僅僅只有省份編碼不一樣,這樣的腳本會存在兩個問題:
1.腳本編寫難度較大,耗費大量人力物力
2.腳本執行難度較大,DBA 需要在31個省來回切數據庫,執行對應腳本
解決方案:
將31個省數據腳本編寫為一個,所有腳本都一樣,關於腳本中省份編碼的數據根據庫中數據來填充。
INSERT INTO TAB SELECT PROV_CODE,'固定值1','固定值2','固定值3' FROM TAB WHERE ...
eg:
表student
CREATE TABLE `student` ( `s_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PRK', `s_name` varchar(32) DEFAULT NULL COMMENT '學生姓名', PRIMARY KEY (`s_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
表數據:
現在要求插入幾條數據,要求名字是從表中讀取
insert into student select 11,s_name from student where s_id = 8;
這里的 where 語句僅僅是為了限制查出來的結果這個可以根據實際情況編寫。