SQL插入數據--數據中的某一列來自本表中的數據

背景:數據庫

項目初期使用的配置庫和業務庫兩種數據庫並行,全部配置數據位於配置庫,全部業務數據根據不一樣省份位於不一樣數據庫。因爲使用省份愈來愈多,各省的配置數據也愈來愈多致使配置庫的數據量過於龐大,各省共用一個配置庫數據,僅依靠省份編碼去區分,查詢一個簡單配置數據須要耗費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 語句僅僅是爲了限制查出來的結果這個能夠根據實際狀況編寫。

相關文章
相關標籤/搜索