最近接手了公司另一個項目的數(shù)據(jù)庫,負(fù)責(zé)數(shù)據(jù)庫的重構(gòu),不可避免的要進行數(shù)據(jù)的導(dǎo)入導(dǎo)出,于是利用查詢生成臨時表就起了大的作用 1.要將與公司表相關(guān)聯(lián)的表存成ID,之前表里面存的是公司名稱,大量的漢字不利于檢索。 首先做好原數(shù)據(jù)庫的備份,備份很重要,備份很重要 1. 生成臨時表 2.在臨時表里面做更新 3.截斷原來的表修改字段名 4.將修改后的數(shù)據(jù)導(dǎo)入新表
create table test SELECT * from 要更新的表名;UPDATE test aLEFT JOIN e_company b ON b.`name` = a.company_nameSET a.company_name = b.idinsert into 要更新的表名 SELECT * from test如果你有很多張表表的話這樣就比較麻煩 ,可以考慮把表名當(dāng)做變量來寫成一個動態(tài)SQL結(jié)合存儲過程 這樣只需要傳參數(shù)就可以了
需要注意的是,動態(tài)SQL每次只能執(zhí)行一個SQL語句,所以你要將SQL分開來進行concat處理,在執(zhí)行 否則就會報錯。 下面以yy表為列
create PROCEDURE tests(tableName varchar(20)) BEGIN set @tableNames = CONCAT(tableName); set @sqlStr = CONCAT('drop table if EXISTS test;'); prepare stmt from @sqlStr; execute stmt ; deallocate prepare stmt; set @sqlStr = CONCAT('create table test select * from ',@tableNames,';'); prepare stmt from @sqlStr; execute stmt ; deallocate prepare stmt; set @sqlStr = CONCAT('update test a LEFT JOIN e_company b ON b.`name`= a.company_name SET a.company_name = b.id;'); prepare stmt from @sqlStr; execute stmt ; deallocate prepare stmt; set @sqlStr = CONCAT('truncate table ',@tableNames,';'); prepare stmt from @sqlStr; execute stmt ; deallocate prepare stmt; set @sqlStr = CONCAT('insert into ',@tableNames,' select * from test'); prepare stmt from @sqlStr; execute stmt ; deallocate prepare stmt;END;新聞熱點
疑難解答