mysql LOAD語句批量錄入數據。本站提示廣大學習愛好者:(mysql LOAD語句批量錄入數據)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql LOAD語句批量錄入數據正文
1、根本語法
語法:LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。假如指定LOCAL症結詞,從客戶主機讀文件。假如LOCAL沒指定,文件必需位於辦事器上。(LOCAL在MySQL3.22.6或今後版本中可用。)
為了平安緣由,當讀取位於辦事器上的文本文件時,文件必需處於數據庫目次或可被一切人讀取。別的,為了對辦事器上文件應用LOAD DATA INFILE,在辦事器主機上你必需有file的權限。見第七章 數據庫平安。
REPLACE和IGNORE症結詞掌握對現有的獨一鍵記載的反復的處置。假如你指定REPLACE,新即將取代有雷同的獨一鍵值的現有行。假如你指定IGNORE,跳過有獨一鍵的現有行的反復行的輸出。假如你不指定任何一個選項,當找到反復鍵鍵時,湧現一個毛病,而且文本文件的余下部門被疏忽時。
假如你應用LOCAL症結詞從一個當地文件裝載數據,辦事器沒有方法在操作確當中停滯文件的傳輸,是以缺省的行動似乎IGNORE被指定一樣。
2、文件的搜索准繩
當在辦事器主機上尋覓文件時,辦事器應用以下規矩:
假如給出一個相對途徑名,辦事器應用該途徑名。
假如給出一個有一個或多個前置部件的絕對途徑名,辦事器絕對辦事器的數據目次搜刮文件。
假如給出一個沒有前置部件的一個文件名,辦事器在以後數據庫的數據庫目次尋覓文件。
留意這些規矩意味著一個像“./myfile.txt”給出的文件是從辦事器的數據目次讀取,而作為“myfile.txt”給出的一個文件是從以後數據庫的數據庫目次下讀取。也要留意,關於以下哪些語句,對db1文件從數據庫目次讀取,而不是db2:
mysql> USE db1; mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;
3、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表示以下:
在換行符處尋覓行界限
在定位符處將行分進字段
不要希冀字段由任何引號字符封裝
將由“\”開首的定位符、換行符或“\”說明是字段值的部門字面字符
LOAD DATA INFILE能被用來讀取從內部起源取得的文件。例如,以dBASE格局的文件將有由逗號分隔並用雙引號包抄的字段。假如文件中的行由換行符終止,上面顯示的敕令解釋你將用來裝載文件的字段和行處置選項:
mysql> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
任何字段或行處置選項可以指定一個空字符串('')。假如不是空,FIELDS [OPTIONALLY] ENCLOSED BY和FIELDS ESCAPED BY值必需是一個單個字符。FIELDS TERMINATED BY和LINES TERMINATED BY值可所以跨越一個字符。例如,寫入由回車換行符對(CR+LF)終止的行,或讀取包括如許行的一個文件,指定一個LINES TERMINATED BY '\r\n'子句。
FIELDS [OPTIONALLY] ENCLOSED BY掌握字段的包抄字符。關於輸入(SELECT ... INTO OUTFILE),假如你省略OPTIONALLY,一切的字段由ENCLOSED BY字符包抄。關於如許的輸入的一個例子(應用一個逗號作為字段分隔符)顯示鄙人面:
"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
留意,一個字段值中的ENCLOSED BY字符的湧現經由過程用ESCAPED BY字符作為其前綴來本義。也要留意,假如你指定一個空ESCAPED BY值,能夠發生不克不及被LOAD DATA INFILE准確讀出的輸入。例如,假如本義字符為空,下面顯示的輸入顯示以下。留意到在第四行的第二個字段包括追隨引號的一個逗號,它(毛病地)好象要終止字段:
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值的第一個字符
ASCII 0(現實大將後續本義字符寫成 ASCII'0',而不是一個零值字節)
假如FIELDS ESCAPED BY字符是空的,沒有字符被本義。指定一個空本義字符能夠不是一個好主張,特殊是假如在你數據中的字段值包括適才給出的表中的任何字符。
關於輸出,假如FIELDS ESCAPED BY字符不是空的,該字符的湧現被剝去而且後續字符在字面上作為字段值的一個部門。破例是一個本義的“0”或“N”(即,\0或\N,假如本義字符是“\”)。這些序列被說明為ASCII 0(一個零值字節)和NULL。見上面關於NULL處置的規矩。
總結
為數據庫裝載數據是治理員的主要職責之一,正由於主要,所以MySQL供給的辦法也長短常單一。個中重要的在本節曾經羅列:
1、應用INSERT、REPLACE語句
2、應用INSERT/REPLACE…SELECT語句
3、應用LOAD DATA INFILE語句
4、應用適用法式mysqlimport