程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL load語句詳細介紹

MySQL load語句詳細介紹

編輯:關於MYSQL數據庫

load的語法

復制代碼 代碼如下:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [FIELDS
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char' ]
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...)]

LOAD DATA INFILE語句用於高速地從一個文本文件中讀取行,並裝入一個表中。文件名稱必須為一個文字字符串。

由character_set_database系統變量指示的字符集被用於解釋文件中的信息。SET NAMES和character_set_client的設置不會影響對輸入的解釋。

典型的示例

復制代碼 代碼如下:
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'

如果您只想載入一個表的部分列,則應指定一個列清單:

復制代碼 代碼如下:
LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2);

文件的路徑

如果指定了LOCAL,則被認為與連接的客戶端有關:

 1.如果指定了LOCAL,則文件會被客戶主機上的客戶端讀取,並被發送到服務器。文件會被給予一個完整的路徑名稱,以指定確切的位置。如果給定的是一個相對的路徑名稱,則此名稱會被理解為相對於啟動客戶端時所在的目錄。

 2.如果LOCAL沒有被指定,則文件必須位於服務器主機上,並且被服務器直接讀取。

當在服務器主機上為文件定位時,服務器使用以下規則:

1).如果給定了一個絕對的路徑名稱,則服務器使用此路徑名稱。
2).如果給定了帶有一個或多個引導組件的相對路徑名稱,則服務器會搜索相對於服務器數據目錄的文件。
3).如果給定了一個不帶引導組件的文件名稱,則服務器會在默認數據庫的數據庫目錄中尋找文件。

注意,這些規則意味著名為./myfile.txt的文件會從服務器數據目錄中被讀取,而名為myfile.txt的同樣的文件會從默認數據庫的數據庫目錄中讀取。

從客戶端使用絕對路徑load數據

復制代碼 代碼如下:
LOAD DATA LOCAL INFILE '/import/data.txt' INTO TABLE db2.my_table;

從服務器裡使用相對路徑load數據

下面的LOAD DATA語句會從db1數據庫目錄中讀取文件data.txt,因為db1是當前數據庫。即使語句明確把文件載入到db2數據庫中的表裡,也會從db1目錄中讀取。

復制代碼 代碼如下:
USE db1;
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;

IGNORE number LINES選項

IGNORE number LINES選項可以被用於在文件的開始處忽略行。

您可以使用IGNORE 1 LINES來跳過一個包含列名稱的起始標題行:
復制代碼 代碼如下:
LOAD DATA INFILE '/tmp/test.txt'  INTO TABLE test IGNORE 1 LINES;

REPLACE和IGNORE

有些輸入記錄把原有的記錄復制到唯一關鍵字值上。REPLACE和IGNORE關鍵字用於控制這些輸入記錄的操作。

如果您指定了REPLACE,則輸入行會替換原有行(換句話說,與原有行一樣,對一個主索引或唯一索引具有相同值的行)。

如果您指定IGNORE,則把原有行復制到唯一關鍵字值的輸入行被跳過。

如果您這兩個選項都不指定,則運行情況根據LOCAL關鍵詞是否被指定而定。不使用LOCAL時,當出現重復關鍵字值時,會發生錯誤,並且剩下的文本文件被忽略。使用LOCAL時,默認的運行情況和IGNORE被指定時的情況相同;這是因為在運行中間,服務器沒有辦法中止文件的傳輸

索引的影響

如果您對一個空的MyISAM表使用LOAD DATA INFILE,則所有的非唯一索引會被創建在一個獨立批中(對於REPAIR TABLE)。當您有許多索引時,這通常會使LOAD DATA INFILE大大加快。通常,LOAD DATA INFILE的速度會非常快,但是在某些極端情況下,您可以在把文件載入到表中之前使用ALTER TABLE...DISABLE KEYS關閉LOAD DATA INFILE,或者在載入文件之後使用ALTER TABLE...ENABLE KEYS再次創建索引,使創建索引的速度更快。

FIELDS和LINES的默認值

如果您不指定FIELDS子句,則默認值為假設您寫下如下語句時的值:

復制代碼 代碼如下:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'

如果您不指定LINES子句,則默認值為假設您寫下如下語句時的值:

復制代碼 代碼如下:
LINES TERMINATED BY '\n' STARTING BY ''

換句話說,當讀取輸入值時,默認值會使LOAD DATA INFILE按如下方式運行:

復制代碼 代碼如下:
在新行處尋找行的邊界。
不會跳過任何行前綴。
在制表符處把行分解為字段。
不希望字段被包含在任何引號字符之中。
出現制表符、新行、或在‘\'前有‘\'時,理解為作為字段值一部分的文字字符。

相反的,當編寫輸出值時,默認值會使SELECT...INTO OUTFILE按如下方式運行:

復制代碼 代碼如下:
在字段之間寫入制表符。
不把字段包含在任何引號字符中。
當字段值中出現制表符、新行或‘\'時,使用‘\'進行轉義。
在行的末端寫入新行。

注意,要寫入FIELDS ESCAPED BY ‘\\',您必須為待讀取的值指定兩個反斜槓,作為一個單反斜槓使用。

備注:如果您已經在Windows系統中生成了文本文件,您可能必須使用LINES TERMINATED BY ‘\r\n'來正確地讀取文件,因為Windows程序通常使用兩個字符作為一個行終止符。部分程序,當編寫文件時,可能會使用\r作為行終止符。要讀取這樣的文件,應使用LINES TERMINATED BY ‘\r'。

STARTING  LINES選項

如果所有您希望讀入的行都含有一個您希望忽略的共用前綴,則您可以使用'prefix_string'來跳過前綴(和前綴前的字符)。如果某行不包括前綴,則整個行被跳過。注釋:prefix_string會出現在一行的中間。

以下面的test.txt為文件源

復制代碼 代碼如下:
xxx"row",1
something xxx"row",2

使用以下sql導入數據

復制代碼 代碼如下:
LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test LINES STARTING BY "xxx";

最後並只得到數據("row",1)和("row",2)。

TERMINATED LINES選項

如果jokes被由%%組成的行分隔,要讀取包含jokes的文件,您可以這麼操作:

復制代碼 代碼如下:
LOAD DATA INFILE '/tmp/jokes.txt' INTO TABLE jokes FIELDS TERMINATED BY '' LINES TERMINATED BY '\n%%\n' (joke);

TERMINATED,ENCLOSED,ESCAPED FIELD選項

TERMINATED用於控制字段的分隔符,可以為多個字符。

ENCLOSED BY用於用於控制字段的引號,必須為單一字符,如果您忽略了詞語OPTIONALLY,則所有的字段都被包含在ENCLOSED BY字符串中,如果您指定了OPTINALLY,則ENCLOSED BY字符只被用於包含具有字符串數據類型(比如CHAR, BINARY, TEXT或ENUM)的列中的值.

SELECT...INTO OUTFILE導出數據,ENCLOSED BY '"',忽略OPTIONALLY

復制代碼 代碼如下:
"1","a string","100.20"

SELECT...INTO OUTFILE導出數據,ENCLOSED BY '"',指定OPTIONALLY

復制代碼 代碼如下:
1,"a string",100.20

ESCAPED BY用於轉義,FIELDS ESCAPED BY值必須為單一字符。

如果FIELDS ESCAPED BY字符為空字符,則沒有字符被轉義,並且NULL被作為NULL輸出,而不是\N。去指定一個空的轉義符不是一個好辦法,特別是如果數據的字段值包含任何剛給定的清單中的字符時,更不能這麼做。

如果在字段值內出現ENCLOSED BY字符,則通過使用ESCAPED BY字符作為前綴,對ENCLOSED BY字符進行轉義。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved