select into outfile用法
SELECT ... FROM TABLE_A INTO OUTFILE "/path/to/file" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
MySQL中,可以使用SELECT...INTO OUTFILE語句將表的內容導出為一個文本文件。其基本的語法格式如下:
SELECT [列名] FROM table [WHERE 語句] INTO OUTFILE '目標文件' [OPTION];
該語句分為兩個部分。前半部分是一個普通的SELECT語句,通過這個SELECT語句來查詢所需要的數據;
后半部分是導出數據的。其中,“目標文件”參數指出將查詢的記錄導出到哪個文件中;
“OPTION”參數為可選參數選項,其可能的取值有:
- FIELDS TERMINATED BY '字符串':設置字符串為字段之間的分隔符,可以為單個或多個字符。默認值是“\t”。
- FIELDS ENCLOSED BY '字符':設置字符來括住字段的值,只能為單個字符。默認情況下不使用任何符號。
- FIELDS OPTIONALLY ENCLOSED BY '字符':設置字符來括住CHAR、VARCHAR和TEXT等字符型字段。默認情況下不使用任何符號。
- FIELDS ESCAPED BY '字符':設置轉義字符,只能為單個字符。默認值為“\”。
- LINES STARTING BY '字符串':設置每行數據開頭的字符,可以為單個或多個字符。默認情況下不使用任何字符。
- LINES TERMINATED BY '字符串':設置每行數據結尾的字符,可以為單個或多個字符。默認值是“\n”。
FIELDS和LINES兩個子句都是自選的,但是如果兩個子句都被指定了,FIELDS必須位於LINES的前面。
注意:
該語法中的“目標文件”被創建到服務器主機上,因此必須擁有文件寫入權限(FILE權限)后,才能使用此語法。同時,“目標文件”不能是一個已經存在的文件。
SELECT...INTO OUTFILE語句可以非常快速地把一個表轉儲到服務器上。如果想要在服務器主機之外的部分客戶主機上創建結果文件,則不能使用SELECT...INTO OUTFILE語句。
load data infile用法
LOAD DATA INFILE "/path/to/file" INTO TABLE table_name; 注意:如果導出時用到了FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'語句,那么LOAD時也要加上同樣的分隔限制語句。還要注意編碼問題。
舉個栗子:
導出example數據庫下employee表的記錄。其中,字段之間用“、”隔開,字符型數據用雙引號括起來。每條記錄以“>”開頭。SQL代碼如下:
SELECT * FROM example.employee INTO OUTFILE 'D:/tmp/emp.txt' FIELDS TERMINATED BY '\、' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '\>' TERMINATED BY '\r\n';
FIELDS必須位於LINES的前面,多個FIELDS子句排列在一起時,后面的FIELDS必須省略;同樣,多個LINES子句排列在一起時,后面的LINES也必須省略。
如果在employee表中包含了中文字符,需要注明編碼格式, CHARACTER SET gbk|utf8 語句,SQL代碼如下:
SELECT * FROM example.employee INTO OUTFILE 'F:/tmp/emp.txt' CHARACTER SET utf8 FIELDS TERMINATED BY '\、' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '\>' TERMINATED BY '\r\n';
“TERMINATED BY '\r\n'”可以保證每條記錄占一行。因為Windows操作系統下“\r\n”才是回車換行。如果不加這個選項,默認情況只是“\n”