mysql高速導入導出大容量TXT文本
先談談如何mysql導入TXT
www.2cto.com
用到loaddata, MySQL的LOAD DATA INFILE語句用於高速地從一個文本文件中讀取行,並裝入一個表中。LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。
load data參數配置:
SQL代碼
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt(file路徑)' [REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name,...)]
如果指定LOCAL關鍵詞,從客戶本地主機讀文件。如果LOCAL沒指定,文件必須位於服務器上(遠程用的)。(LOCAL在MySQL3.22.6或以後版本中可用。)如果你指定關鍵詞LOW_PRIORITY,LOAD DATA語句的執行被推遲到沒有其他客戶讀取表後。REPLACE和IGNORE關鍵詞控制對現有的唯一鍵記錄的重復的處理。如果你指定REPLACE,新行將代替有相同的唯一鍵值的現有行。
如果你 指定IGNORE,跳過有唯一鍵的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復鍵鍵時,出現一個錯誤,並且文本文件的余下部分被忽略時。如果你使用LOCAL關鍵詞從一個本地文件裝載數據,服務器沒有辦法在操作的當中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。為了將一個數據庫的數據寫入一個文件,使用SELECT ... INTO OUTFILE,為了將文件讀回數據庫,使用LOAD DATA INFILE。兩個命令的FIELDS和LINES子句的語法是相同的。兩個子句是可選的,但是如果指定兩個,FIELDS必須在LINES之前。
如果你指定一個FIELDS子句,它的每一個子句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)也是可選的,除了你必須至少指定他們之一。
如果你不指定一個FIELDS子句,缺省值與如果你這樣寫的相同:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
如果你不指定一個LINES子句,缺省值與如果你這樣寫的相同:
LINES TERMINATED BY '\n'
換句話說,缺省值導致讀取輸入時,LOAD DATA INFILE表現如下:
在換行符處尋找行邊界
在定位符處將行分進字段
不要期望字段由任何引號字符封裝
將由“\”開頭的定位符、換行符或“\”解釋是字段值的部分字面字符
相反,缺省值導致在寫入輸出時,SELECT ... INTO OUTFILE表現如下:
在字段之間寫定位符
不用任何引號字符封裝字段
使用“\”轉義出現在字段中的定位符、換行符或“\”字符
在行尾處寫換行符
注意,為了寫入FIELDS ESCAPED BY '\\',對作為一條單個的反斜線被讀取的值,你必須指定2條反斜線值。
www.2cto.com
IGNORE number LINES選項可被用來忽略在文件開始的一個列名字的頭:
mysql> LOAD DATA INFILE "/tmp/file_name" into table test IGNORE 1 LINES;
我建了一個demo表:
SQL代碼
mysql> use DB_cmd_demo;
mysql> explain insertdemo;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| code | varchar(25) | YES | | NULL | |
| demo | varchar(15) | NO | | | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
File_AA.txt文本格式如下:
XML/HTML代碼
AAVTUALOJJKEC
AAHRFTXIBLGYG
AAOAQVLJROSBT
AACNKRKBZEDPE
SQL代碼
mysql> load data local infile 'd:\File_AA.txt' into table insertdemo (demo);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
生成如下:
SQL代碼
mysql> select * from insertdemo;
+------+----------------+
| code | demo |
+------+----------------+
| NULL | AACNKRKBZEDPE |
| ULL | AAOAQVLJROSBT
| ULL | AAHRFTXIBLGYG
| ULL | AAVTUALOJJKEC
+------+----------------+
4 rows in set (0.00 sec)
再談談mysql如何導出到TXT
這是網上的一個demo,在這裡貼一下,其實兩個用法主要是理解每個參數的用法就OK了
www.2cto.com
SQL代碼
-- 導出數據為文本文件
SELECT demo,code
INTO OUTFILE 'd:\DM_HY_EXPORT.TXT'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ''''
LINES TERMINATED BY '\n'
FROM insertdemo;
FIELDS TERMINATED BY ',' 數據字段間用逗號隔開
OPTIONALLY ENCLOSED BY '''' 每個字段的數據用單引號括住(注意單引號的表達方法)
LINES TERMINATED BY '\n' 每條數據結束用'\n'作為換行符。