<!-- 環境: Windows 2003 SP2 + MySQL5.5.28 Author: 博客園小dee -->
有的時候需要把在一張表中用 select 語句查詢出來的結果保存到另一張結構相同的表中,可以有幾種方法來實現:
方法一:
在命令行下使用一對SQL語句完成該操作:
導出查詢結果:Select語句 into outfile '保存路徑+文件名';
導入查詢結果:load data local infile '保存路徑+文件名' into table 表明 character set utf8;
例如:
查詢出數據庫jc1992中表jc_archives中發布時間晚於2014年9月1日的數據並保存在本地磁盤D的mysqltmp目錄下,保存為1.sql,在命令行中輸入:
SELECT * from jc_archives where senddate>UNIX_TIMESTAMP('2014-9-1' ) into outfile 'D://mysqltmp/1.sql';
命令行如圖:
1.sql用EditPlus打開如圖:
再把保存查詢結果的1.sql導入到另一數據庫data_tmp的表archives中,在命令行中輸入:
load data local infile "D://mysqltmp/1.sql" into table archives character set utf8;
命令行如圖:
這樣就把第一張表中的查詢結果導入了第二張表。
要注意的是在導入時,兩張表的主鍵或者唯一索引的值不能有重復,否則會跳過不執行或者報警告:
方法二:
導出查詢結果:使用MySQL自帶的轉存數據庫工具musqldump
命令行進入musqldump,使用語句
mysqldump -u用戶名 -p -c --default-character-set=字符集 數據庫名 數據表 --where="查詢條件" > 保存路徑和文件名
導入查詢結果:mysql -u用戶名 -p -c --default-character-set=字符集 數據庫名 < 保存路徑和文件名
例如:
查詢出數據庫jc1992中jc_arctiny的發布時間晚於2014年9月1日的數據並保存在本地磁盤D的mysqltmp目錄下,保存為2.sql,在命令行中輸入:
mysqldump -uroot -p -c --default-character-set=utf8 jc1992 jc_arctiny --where="senddate>UNIX_TIMESTAMP('2014-9-1')" > D:\mysqltmp\2.sql
命令行如圖:
2.sql中保存的是完整的SQL語句,用記事本打開如圖:
再把保存查詢結果的2.sql導入到另一數據庫data_tmp的表中,在命令行中輸入:
mysql -uroot -p -c --default-character-set=utf8 data_tmp < D:\mysqltmp\2.sql
命令行如圖:
此時數據庫data_tmp中多了一張表jc_arctiny,表里的數據正是查詢出來的的那部分數據。
注意:此方法導出時用的是mysqldump工具,而導入時用的是mysql命令。而且此方法由於導出的是完整的SQL語句,包括創建和設計數據庫,所以只適用於恢復數據,而不適用於將一張表中的數據導入到另一張表里,不過,也可以使用保存文件中的INSERT語句把查詢出的數據插入到另一張表中,過程要周折一些。方法一對於SQL語句的設計更靈活一些。
如需轉載,請在文章頁面保留此說明並且給出原文鏈接。謝謝!