背景:數據庫
項目初期使用的配置庫和業務庫兩種數據庫並行,全部配置數據位於配置庫,全部業務數據根據不一樣省份位於不一樣數據庫。因爲使用省份愈來愈多,各省的配置數據也愈來愈多致使配置庫的數據量過於龐大,各省共用一個配置庫數據,僅依靠省份編碼去區分,查詢一個簡單配置數據須要耗費200ms。所以項目組提出配置庫分離方案,將原有配置庫數據拆分到各個省業務庫中,因爲代碼中大部分會根據省份編碼判斷,所以業務庫中的碼錶依舊須要省份編碼字段。針對全網需求,若是涉及到配置數據,這樣就須要提供31個省的數據腳本,這31個省的數據腳本可能僅僅只有省份編碼不同,這樣的腳本會存在兩個問題:編碼
1.腳本編寫難度較大,耗費大量人力物力spa
2.腳本執行難度較大,DBA 須要在31個省來回切數據庫,執行對應腳本code
解決方案:blog
將31個省數據腳本編寫爲一個,全部腳本都同樣,關於腳本中省份編碼的數據根據庫中數據來填充。class
INSERT INTO TAB SELECT PROV_CODE,'固定值1','固定值2','固定值3' FROM TAB WHERE ...
eg:配置
表studentselect
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
表數據:並行
如今要求插入幾條數據,要求名字是從表中讀取im
insert into student select 11,s_name from student where s_id = 8;
這裏的 where 語句僅僅是爲了限制查出來的結果這個能夠根據實際狀況編寫。