mysql LOAD語句批量錄入數(shù)據(jù)
1、基本語法
語法:LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE語句從一個(gè)文本文件中以很高的速度讀入一個(gè)表中。如果指定LOCAL關(guān)鍵詞,從客戶主機(jī)讀文件。如果LOCAL沒指定,文件必須位于服務(wù)器上。(LOCAL在MySQL3.22.6或以后版本中可用。)
為了安全原因,當(dāng)讀取位于服務(wù)器上的文本文件時(shí),文件必須處于數(shù)據(jù)庫目錄或可被所有人讀取。另外,為了對服務(wù)器上文件使用LOAD DATA INFILE,在服務(wù)器主機(jī)上你必須有file的權(quán)限。見第七章 數(shù)據(jù)庫安全。
REPLACE和IGNORE關(guān)鍵詞控制對現(xiàn)有的唯一鍵記錄的重復(fù)的處理。如果你指定REPLACE,新行將代替有相同的唯一鍵值的現(xiàn)有行。如果你指定IGNORE,跳過有唯一鍵的現(xiàn)有行的重復(fù)行的輸入。如果你不指定任何一個(gè)選項(xiàng),當(dāng)找到重復(fù)鍵鍵時(shí),出現(xiàn)一個(gè)錯(cuò)誤,并且文本文件的余下部分被忽略時(shí)。
如果你使用LOCAL關(guān)鍵詞從一個(gè)本地文件裝載數(shù)據(jù),服務(wù)器沒有辦法在操作的當(dāng)中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。
2、文件的搜尋原則
當(dāng)在服務(wù)器主機(jī)上尋找文件時(shí),服務(wù)器使用下列規(guī)則:
如果給出一個(gè)絕對路徑名,服務(wù)器使用該路徑名。
如果給出一個(gè)有一個(gè)或多個(gè)前置部件的相對路徑名,服務(wù)器相對服務(wù)器的數(shù)據(jù)目錄搜索文件。
如果給出一個(gè)沒有前置部件的一個(gè)文件名,服務(wù)器在當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫目錄尋找文件。
注意這些規(guī)則意味著一個(gè)像“./myfile.txt”給出的文件是從服務(wù)器的數(shù)據(jù)目錄讀取,而作為“myfile.txt”給出的一個(gè)文件是從當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫目錄下讀取。也要注意,對于下列哪些語句,對db1文件從數(shù)據(jù)庫目錄讀取,而不是db2:
mysql> USE db1; mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table; |
3、FIELDS和LINES子句的語法
如果你指定一個(gè)FIELDS子句,它的每一個(gè)子句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)也是可選的,除了你必須至少指定他們之一。
如果你不指定一個(gè)FIELDS子句,缺省值與如果你這樣寫的相同:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
如果你不指定一個(gè)LINES子句,缺省值與如果你這樣寫的相同:
LINES TERMINATED BY '\n'
換句話說,缺省值導(dǎo)致讀取輸入時(shí),LOAD DATA INFILE表現(xiàn)如下:
在換行符處尋找行邊界
在定位符處將行分進(jìn)字段
不要期望字段由任何引號字符封裝
將由“\”開頭的定位符、換行符或“\”解釋是字段值的部分字面字符
LOAD DATA INFILE能被用來讀取從外部來源獲得的文件。例如,以dBASE格式的文件將有由逗號分隔并用雙引號包圍的字段。如果文件中的行由換行符終止,下面顯示的命令說明你將用來裝載文件的字段和行處理選項(xiàng):
mysql> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; |
任何字段或行處理選項(xiàng)可以指定一個(gè)空字符串('')。如果不是空,F(xiàn)IELDS [OPTIONALLY] ENCLOSED BY和FIELDS ESCAPED BY值必須是一個(gè)單個(gè)字符。FIELDS TERMINATED BY和LINES TERMINATED BY值可以是超過一個(gè)字符。例如,寫入由回車換行符對(CR+LF)終止的行,或讀取包含這樣行的一個(gè)文件,指定一個(gè)LINES TERMINATED BY '\r\n'子句。
FIELDS [OPTIONALLY] ENCLOSED BY控制字段的包圍字符。對于輸出(SELECT ... INTO OUTFILE),如果你省略O(shè)PTIONALLY,所有的字段由ENCLOSED BY字符包圍。對于這樣的輸出的一個(gè)例子(使用一個(gè)逗號作為字段分隔符)顯示在下面:
"1","a string","100.20"
"2","a string containing a , comma","102.20"
"3","a string containing a \" quote","102.20"
"4","a string containing a \", quote and comma","102.20"
如果你指定OPTIONALLY,ENCLOSED BY字符僅被用于包圍CHAR和VARCHAR字段:
1,"a string",100.20
2,"a string containing a , comma",102.20
3,"a string containing a \" quote",102.20
4,"a string containing a \", quote and comma",102.20
注意,一個(gè)字段值中的ENCLOSED BY字符的出現(xiàn)通過用ESCAPED BY字符作為其前綴來轉(zhuǎn)義。也要注意,如果你指定一個(gè)空ESCAPED BY值,可能產(chǎn)生不能被LOAD DATA INFILE正確讀出的輸出。例如,如果轉(zhuǎn)義字符為空,上面顯示的輸出顯示如下。注意到在第四行的第二個(gè)字段包含跟隨引號的一個(gè)逗號,它(錯(cuò)誤地)好象要終止字段:
1,"a string",100.20
2,"a string containing a , comma",102.20
3,"a string containing a " quote",102.20
4,"a string containing a ", quote and comma",102.20
FIELDS ESCAPED BY控制如何寫入或讀出特殊字符。如果FIELDS ESCAPED BY字符不是空的,它被用于前綴在輸出上的下列字符:
FIELDS ESCAPED BY字符
FIELDS [OPTIONALLY] ENCLOSED BY字符
FIELDS TERMINATED BY和LINES TERMINATED BY值的第一個(gè)字符
ASCII 0(實(shí)際上將后續(xù)轉(zhuǎn)義字符寫成 ASCII'0',而不是一個(gè)零值字節(jié))
如果FIELDS ESCAPED BY字符是空的,沒有字符被轉(zhuǎn)義。指定一個(gè)空轉(zhuǎn)義字符可能不是一個(gè)好主意,特別是如果在你數(shù)據(jù)中的字段值包含剛才給出的表中的任何字符。
對于輸入,如果FIELDS ESCAPED BY字符不是空的,該字符的出現(xiàn)被剝?nèi)ゲ⑶液罄m(xù)字符在字面上作為字段值的一個(gè)部分。例外是一個(gè)轉(zhuǎn)義的“0”或“N”(即,\0或\N,如果轉(zhuǎn)義字符是“\”)。這些序列被解釋為ASCII 0(一個(gè)零值字節(jié))和NULL。見下面關(guān)于NULL處理的規(guī)則。
總結(jié)
為數(shù)據(jù)庫裝載數(shù)據(jù)是管理員的重要職責(zé)之一,正因?yàn)橹匾?,所以MySQL提供的方法也是非常繁多。其中主要的在本節(jié)已經(jīng)列舉:
1、使用INSERT、REPLACE語句
2、使用INSERT/REPLACE…SELECT語句
3、使用LOAD DATA INFILE語句
4、使用實(shí)用程序mysqlimport
相關(guān)文章
MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì))
這篇文章主要介紹了MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì)),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助2022-08-08
使用JDBC從數(shù)據(jù)庫中查詢數(shù)據(jù)的方法
下面小編就為大家?guī)硪黄褂肑DBC從數(shù)據(jù)庫中查詢數(shù)據(jù)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
MySQL如何通過Navicat實(shí)現(xiàn)遠(yuǎn)程連接
這篇文章主要介紹了MySQL如何通過Navicat實(shí)現(xiàn)遠(yuǎn)程連接,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-09-09
詳解MySQL誤操作后怎樣進(jìn)行數(shù)據(jù)恢復(fù)
在大家日常操作數(shù)據(jù)庫時(shí)候難免會因?yàn)椤按笠狻倍`操作,那么誤操作后怎樣進(jìn)行數(shù)據(jù)恢復(fù)呢,下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)。2016-08-08
MySQL數(shù)據(jù)庫實(shí)驗(yàn)之?觸發(fā)器和存儲過程
這篇文章主要介紹了MySQL數(shù)據(jù)庫實(shí)驗(yàn)之?觸發(fā)器和存儲過程,通過掌握某主流DBMS支持的SQL編程語言和編程規(guī)范,規(guī)范設(shè)計(jì)存儲過程展開詳細(xì)介紹,感興趣的朋友可以參考一下2022-06-06
mysql的計(jì)劃任務(wù)與事件調(diào)度實(shí)例分析
這篇文章主要介紹了mysql的計(jì)劃任務(wù)與事件調(diào)度,結(jié)合實(shí)例形式分析了mysql計(jì)劃任務(wù)與事件調(diào)度相關(guān)概念、原理、用法與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
MySQL中Nested-Loop Join算法小結(jié)
數(shù)據(jù)庫中JOIN操作的實(shí)現(xiàn)主要有三種:嵌套循環(huán)連接(Nested Loop Join),歸并連接(Merge Join)和散列連接或者哈稀連接(Hash Join)。其中嵌套循環(huán)連接又視情況又有兩種變形:塊嵌套循環(huán)連接和索引嵌套循環(huán)連接。2015-12-12

