根據資料應用場景的變化,直接将資料作為SQL檔案輸出并不是一個特别好的選擇,因為導出的檔案格式不夠用,例如其它系統需要使用資料的時候,就比較麻煩。是以可以采取居出檔案。
1、使用使用SELECT…INTO OUTFILE導出文本檔案
option:表示附加選項,如下:
into outfile – 指定導出的目錄和檔案名
fields terminated by – 指定字段間分隔符,即定義字段間的分隔符
optionally enclosed by – 指定字段包圍符,即定義包圍字段的字元,而參數optionally表示數值型字段無效,即數值類型的值不要加包圍符
lines terminated by – 指定行間分隔符,即定義每行的分隔符
出現這個問題的原因是mysql的secure_file_prive這個選項沒有開啟,或者這個選擇了特定的檔案路徑,隻有在這個檔案路徑下的檔案才能導入導出mysql
重新開機mysql;
再執行:
select * from tb_sc into OUTFILE "D:\Wnmp\mysql\data\tb_sc.txt";
報沒有權限寫入檔案,需要把‘\’改為‘/’,即可成功!
select * from tb_sc into OUTFILE "D:/Wnmp/mysql/data/tb_sc.txt";
2、使用mysqldump指令導出文本檔案
文法格式:
mysqldump -u root -ppassword -T 目标目錄 dbname table [ option ];
----注意,T是大寫
password:表示root使用者的密碼,和 -p 挨着,中間沒有空格;
目标目錄:指導出的文本檔案的路徑;
dbname:表示資料庫的名稱;
table:表示表的名稱;
option:表示附加選項,如下:
--fields-terminated-by=字元串:設定字元串為字段的分隔符,預設值是“\t”;
--fields-enclosed-by=字元:設定字元來括上字段的值;
--fields-optionally-enclosed-by=字元:設定字元括上char、varchar、text等字元型字段;
--fields-escaped-by=字元:設定轉義字元;
--lines-terminated-by=字元串:設定每行的結束符;
mysqldump -uroot -p123456 -T D:\Wnmp\mysql\data kettle_loandb tb_sc --fields-terminated-by='@' --lines-terminated-by='\r\n'
3、load data
LOAD DATA是SELECT … INTO OUTFILE的補充,要将資料從表寫入檔案,請使用SELECT…INTO OUTFILE。若要将檔案讀回表中,請使用LOAD DATA。FIELDS和LINES子句的文法對于這兩個語句是相同的。
例如:
select * from tb_sc into OUTFILE "D:/Wnmp/mysql/data/tb_sc.txt" fields terminated by ',' optionally enclosed by '"' ;
要讀取以逗号分隔的檔案,正确的語句是:
LOAD DATA INFILE "D:/Wnmp/mysql/data/tb_sc.txt" INTO kettle_loandb tb_sc
FIELDS TERMINATED BY ',';