《Mysql應(yīng)用MySQL load語(yǔ)句詳細(xì)介紹》要點(diǎn):
本文介紹了Mysql應(yīng)用MySQL load語(yǔ)句詳細(xì)介紹,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
load的語(yǔ)法MYSQL學(xué)習(xí)
LOAD DATA INFILE語(yǔ)句用于高速地從一個(gè)文本文件中讀取行,并裝入一個(gè)表中.文件名稱必須為一個(gè)文字字符串.MYSQL學(xué)習(xí)
由character_set_database系統(tǒng)變量指示的字符集被用于解釋文件中的信息.SET NAMES和character_set_client的設(shè)置不會(huì)影響對(duì)輸入的解釋.MYSQL學(xué)習(xí)
典型的示例MYSQL學(xué)習(xí)
如果您只想載入一個(gè)表的部分列,則應(yīng)指定一個(gè)列清單:MYSQL學(xué)習(xí)
文件的路徑MYSQL學(xué)習(xí)
如果指定了LOCAL,則被認(rèn)為與連接的客戶端有關(guān):MYSQL學(xué)習(xí)
?1.如果指定了LOCAL,則文件會(huì)被客戶主機(jī)上的客戶端讀取,并被發(fā)送到服務(wù)器.文件會(huì)被給予一個(gè)完整的路徑名稱,以指定確切的位置.如果給定的是一個(gè)相對(duì)的路徑名稱,則此名稱會(huì)被理解為相對(duì)于啟動(dòng)客戶端時(shí)所在的目錄.MYSQL學(xué)習(xí)
?2.如果LOCAL沒(méi)有被指定,則文件必須位于服務(wù)器主機(jī)上,并且被服務(wù)器直接讀取.MYSQL學(xué)習(xí)
當(dāng)在服務(wù)器主機(jī)上為文件定位時(shí),服務(wù)器使用以下規(guī)則:MYSQL學(xué)習(xí)
1).如果給定了一個(gè)絕對(duì)的路徑名稱,則服務(wù)器使用此路徑名稱.
2).如果給定了帶有一個(gè)或多個(gè)引導(dǎo)組件的相對(duì)路徑名稱,則服務(wù)器會(huì)搜索相對(duì)于服務(wù)器數(shù)據(jù)目錄的文件.
3).如果給定了一個(gè)不帶引導(dǎo)組件的文件名稱,則服務(wù)器會(huì)在默認(rèn)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)目錄中尋找文件.MYSQL學(xué)習(xí)
注意,這些規(guī)則意味著名為./myfile.txt的文件會(huì)從服務(wù)器數(shù)據(jù)目錄中被讀取,而名為myfile.txt的同樣的文件會(huì)從默認(rèn)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)目錄中讀取.MYSQL學(xué)習(xí)
從客戶端使用絕對(duì)路徑load數(shù)據(jù)MYSQL學(xué)習(xí)
從服務(wù)器里使用相對(duì)路徑load數(shù)據(jù)MYSQL學(xué)習(xí)
下面的LOAD DATA語(yǔ)句會(huì)從db1數(shù)據(jù)庫(kù)目錄中讀取文件data.txt,因?yàn)閐b1是當(dāng)前數(shù)據(jù)庫(kù).即使語(yǔ)句明確把文件載入到db2數(shù)據(jù)庫(kù)中的表里,也會(huì)從db1目錄中讀取.MYSQL學(xué)習(xí)
IGNORE number LINES選項(xiàng)MYSQL學(xué)習(xí)
IGNORE number LINES選項(xiàng)可以被用于在文件的開始處忽略行.MYSQL學(xué)習(xí)
您可以使用IGNORE 1 LINES來(lái)跳過(guò)一個(gè)包含列名稱的起始標(biāo)題行:
MYSQL學(xué)習(xí)
REPLACE和IGNOREMYSQL學(xué)習(xí)
有些輸入記錄把原有的記錄復(fù)制到唯一關(guān)鍵字值上.REPLACE和IGNORE關(guān)鍵字用于控制這些輸入記錄的操作.MYSQL學(xué)習(xí)
如果您指定了REPLACE,則輸入行會(huì)替換原有行(換句話說(shuō),與原有行一樣,對(duì)一個(gè)主索引或唯一索引具有相同值的行).MYSQL學(xué)習(xí)
如果您指定IGNORE,則把原有行復(fù)制到唯一關(guān)鍵字值的輸入行被跳過(guò).MYSQL學(xué)習(xí)
如果您這兩個(gè)選項(xiàng)都不指定,則運(yùn)行情況根據(jù)LOCAL關(guān)鍵詞是否被指定而定.不使用LOCAL時(shí),當(dāng)出現(xiàn)重復(fù)關(guān)鍵字值時(shí),會(huì)發(fā)生錯(cuò)誤,并且剩下的文本文件被忽略.使用LOCAL時(shí),默認(rèn)的運(yùn)行情況和IGNORE被指定時(shí)的情況相同;這是因?yàn)樵谶\(yùn)行中間,服務(wù)器沒(méi)有辦法中止文件的傳輸MYSQL學(xué)習(xí)
索引的影響MYSQL學(xué)習(xí)
如果您對(duì)一個(gè)空的MyISAM表使用LOAD DATA INFILE,則所有的非唯一索引會(huì)被創(chuàng)建在一個(gè)獨(dú)立批中(對(duì)于REPAIR TABLE).當(dāng)您有許多索引時(shí),這通常會(huì)使LOAD DATA INFILE大大加快.通常,LOAD DATA INFILE的速度會(huì)非常快,但是在某些極端情況下,您可以在把文件載入到表中之前使用ALTER TABLE...DISABLE KEYS關(guān)閉LOAD DATA INFILE,或者在載入文件之后使用ALTER TABLE...ENABLE KEYS再次創(chuàng)建索引,使創(chuàng)建索引的速度更快.MYSQL學(xué)習(xí)
FIELDS和LINES的默認(rèn)值MYSQL學(xué)習(xí)
如果您不指定FIELDS子句,則默認(rèn)值為假設(shè)您寫下如下語(yǔ)句時(shí)的值:MYSQL學(xué)習(xí)
如果您不指定LINES子句,則默認(rèn)值為假設(shè)您寫下如下語(yǔ)句時(shí)的值:MYSQL學(xué)習(xí)
換句話說(shuō),當(dāng)讀取輸入值時(shí),默認(rèn)值會(huì)使LOAD DATA INFILE按如下方式運(yùn)行:MYSQL學(xué)習(xí)
相反的,當(dāng)編寫輸出值時(shí),默認(rèn)值會(huì)使SELECT...INTO OUTFILE按如下方式運(yùn)行:MYSQL學(xué)習(xí)
注意,要寫入FIELDS ESCAPED BY ‘\\',您必須為待讀取的值指定兩個(gè)反斜杠,作為一個(gè)單反斜杠使用.MYSQL學(xué)習(xí)
備注:如果您已經(jīng)在Windows系統(tǒng)中生成了文本文件,您可能必須使用LINES TERMINATED BY ‘\r\n'來(lái)正確地讀取文件,因?yàn)閃indows程序通常使用兩個(gè)字符作為一個(gè)行終止符.部分程序,當(dāng)編寫文件時(shí),可能會(huì)使用\r作為行終止符.要讀取這樣的文件,應(yīng)使用LINES TERMINATED BY ‘\r'.MYSQL學(xué)習(xí)
STARTING? LINES選項(xiàng)MYSQL學(xué)習(xí)
如果所有您希望讀入的行都含有一個(gè)您希望忽略的共用前綴,則您可以使用'prefix_string'來(lái)跳過(guò)前綴(和前綴前的字符).如果某行不包括前綴,則整個(gè)行被跳過(guò).注釋:prefix_string會(huì)出現(xiàn)在一行的中間.MYSQL學(xué)習(xí)
以下面的test.txt為文件源MYSQL學(xué)習(xí)
使用以下sql導(dǎo)入數(shù)據(jù)MYSQL學(xué)習(xí)
最后并只得到數(shù)據(jù)("row",1)和("row",2).MYSQL學(xué)習(xí)
TERMINATED LINES選項(xiàng)MYSQL學(xué)習(xí)
如果jokes被由%%組成的行分隔,要讀取包含jokes的文件,您可以這么操作:MYSQL學(xué)習(xí)
TERMINATED,ENCLOSED,ESCAPED FIELD選項(xiàng)MYSQL學(xué)習(xí)
TERMINATED用于控制字段的分隔符,可以為多個(gè)字符.MYSQL學(xué)習(xí)
ENCLOSED BY用于用于控制字段的引號(hào),必須為單一字符,如果您忽略了詞語(yǔ)OPTIONALLY,則所有的字段都被包含在ENCLOSED BY字符串中,如果您指定了OPTINALLY,則ENCLOSED BY字符只被用于包含具有字符串?dāng)?shù)據(jù)類型(比如CHAR, BINARY, TEXT或ENUM)的列中的值.MYSQL學(xué)習(xí)
SELECT...INTO OUTFILE導(dǎo)出數(shù)據(jù),ENCLOSED BY '"',忽略O(shè)PTIONALLYMYSQL學(xué)習(xí)
SELECT...INTO OUTFILE導(dǎo)出數(shù)據(jù),ENCLOSED BY '"',指定OPTIONALLYMYSQL學(xué)習(xí)
ESCAPED BY用于轉(zhuǎn)義,FIELDS ESCAPED BY值必須為單一字符.MYSQL學(xué)習(xí)
如果FIELDS ESCAPED BY字符為空字符,則沒(méi)有字符被轉(zhuǎn)義,并且NULL被作為NULL輸出,而不是\N.去指定一個(gè)空的轉(zhuǎn)義符不是一個(gè)好辦法,特別是如果數(shù)據(jù)的字段值包含任何剛給定的清單中的字符時(shí),更不能這么做.MYSQL學(xué)習(xí)
如果在字段值內(nèi)出現(xiàn)ENCLOSED BY字符,則通過(guò)使用ESCAPED BY字符作為前綴,對(duì)ENCLOSED BY字符進(jìn)行轉(zhuǎn)義.MYSQL學(xué)習(xí)
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/3600.html