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


背景:

項目初期使用的配置庫和業務庫兩種數據庫並行,所有配置數據位於配置庫,所有業務數據根據不同省份位於不同數據庫。由於使用省份越來越多,各省的配置數據也越來越多導致配置庫的數據量過於龐大,各省共用一個配置庫數據,僅依靠省份編碼去區分,查詢一個簡單配置數據需要耗費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 語句僅僅是為了限制查出來的結果這個可以根據實際情況編寫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM