MySQL資料匯入匯出之Load data file

yepkeepmoving發表於2016-09-01
MySQL的資料匯入和匯出純資料的方式,一般採用的是load data file  、mysqlimport  、select into outfile 、>/>>重定向的方式,這裡主要介紹load data file和select into outfile 的方式。

一、MySQL匯入和匯出資料:
    1、load data file
    簡介:
    The LOAD DATA INFILE statement reads rows from a text file into a table at a very high speed. LOAD DATA INFILE is the complement of SELECT ...INTO OUTFILE.
    官方參考手冊:http://dev.mysql.com/doc/refman/5.6/en/load-data.html
    語法格式
    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
        [REPLACE | IGNORE]
        INTO TABLE tbl_name
        [PARTITION (partition_name,...)]
        [CHARACTER SET charset_name]
        [{FIELDS | COLUMNS}
            [TERMINATED BY 'string']
            [[OPTIONALLY] ENCLOSED BY 'char']
            [ESCAPED BY 'char']
        ]
        [LINES
            [STARTING BY 'string']
            [TERMINATED BY 'string']
        ]
        [IGNORE number {LINES | ROWS}]
        [(col_name_or_user_var,...)]
        [SET col_name = expr,...]
    load data file示例:
    1)直接匯入檔案
       LOAD DATA INFILE 'test_data.txt' INTO TABLE dbtest.t1;
    2)設定列分隔符和行分隔符
       LOAD DATA LOCAL INFILE 'test_data.txt' INTO TABLE t1
        FIELDS TERMINATED BY ','
       OPTIONALLY ENCLOSED BY '"'
       LINES TERMINATED BY '\n'
    3)匯入到特定的列
       LOAD DATA LOCAL INFILE 'test_data.txt' INTO TABLE  t1 (col1,col2,col3);
        引數說明:
    1)local引數
         如果指定了LOCAL,被認為與連線的客戶端有關,則檔案會被客戶主機上的客戶端讀取,並被髮送到伺服器。檔案會被給予一個完整的路徑名稱,以指定確切的位置。如果給定的是一個相對的路徑名稱,則此名稱會被理解為相對於啟動客戶端時所在的目錄。
         如果LOCAL沒有被指定,則檔案必須位於伺服器主機上,並且被伺服器直接讀取。
    當在伺服器主機上為檔案定位時,伺服器使用以下規則:
           如果給定了一個絕對的路徑名稱,則伺服器使用此路徑名稱。
           如果給定了帶有一個或多個引導元件的相對路徑名稱,則伺服器會搜尋相對於伺服器資料目錄的檔案。
           如果給定了一個不帶引導元件的檔名稱,則伺服器會在預設資料庫的資料庫目錄中尋找檔案。
    注意,這些規則意味著名為./myfile.txt的檔案會從伺服器資料目錄中被讀取,而名為myfile.txt的同樣的檔案會從預設資料庫的資料庫目錄中讀取。
    從客戶端使用絕對路徑load資料:LOAD DATA LOCAL INFILE '/import/test_data.txt' INTO TABLE dbtest.t1;
    從伺服器裡使用相對路徑load資料,下面的LOAD DATA語句會從dbtest資料庫目錄中讀取檔案test_data.txt,因為db1是當前資料庫。即使語句明確把檔案載入到db2資料庫中的表裡,也會從dbtest目錄中讀取。
    USE dbtest;
    LOAD DATA INFILE 'test_data.txt' INTO TABLE dbtest.t1;
    總而言之:如果指定local關鍵詞,則表明從客戶主機讀檔案。如果local沒指定,檔案必須位於伺服器上。
    2)IGNORE number LINES引數
    IGNORE number LINES選項可以被用於在檔案的開始處忽略行。可以使用IGNORE 1 LINES來跳過一個包含列名稱的起始標題行:
    LOAD DATA INFILE '/tmp/test.txt'  INTO TABLE test IGNORE 1 LINES;
    3)REPLACE、IGNORE引數
    如果您指定了REPLACE,則輸入行會替換原有行(與原有行一樣,對一個主索引或唯一索引具有相同值的行)。
    如果您指定IGNORE,則把原有行復制到唯一關鍵字值的輸入行被跳過。
    如果您這兩個選項都不指定,則執行情況根據LOCAL關鍵詞是否被指定而定。不使用LOCAL時,當出現重複關鍵字值時,會發生錯誤,並且剩下的文字檔案被忽略。使用LOCAL時,預設的執行情況和IGNORE被指定時的情況相同;這是因為在執行中間,伺服器沒有辦法中止檔案的傳輸。
    4)FIELDS引數
    指定了檔案欄位的分割格式,列分隔符引數語法為        
    [{FIELDS | COLUMNS}
            [TERMINATED BY 'string']
            [[OPTIONALLY] ENCLOSED BY 'char']
            [ESCAPED BY 'char']
        ]
    
    terminated by描述欄位的分隔符,預設情況下是tab字元(\t)
    enclosed by描述的是欄位的括起字元,如果您忽略了詞語OPTIONALLY,則所有的欄位都被包含在ENCLOSED BY字串中,如果您指定了OPTINALLY,則ENCLOSED BY字元只被用於包含具有字串資料型別(比如CHAR, BINARY, TEXT或ENUM)的列中的值.
    escaped by描述的跳脫字元。預設的是反斜槓(backslash:\ )
    如果您不指定FIELDS子句,則預設值為假設您寫下如下語句時的值:
    FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'

    當讀取輸入值時,預設值會使LOAD DATA INFILE按如下方式執行:
       在新行處尋找行的邊界。
       不會跳過任何行字首。
       在製表符處把行分解為欄位。
       不希望欄位被包含在任何引號字元之中。
       出現製表符、新行、或在'\'前有'\'時,理解為作為欄位值一部分的文字字元。
    備註:如果您已經在Windows系統中生成了文字檔案,您可能必須使用LINES TERMINATED BY  '\r\n'來正確地讀取檔案,因為Windows程式通常使用兩個字元作為一個行終止符。部分程式,當編寫檔案時,可能會使用\r作為行終止符。要讀取這樣的檔案,應使用LINES TERMINATED BY '\r'。要寫入FIELDS ESCAPED BY  '\\',您必須為待讀取的值指定兩個反斜槓,作為一個單反斜槓使用。
    6)LINES引數
    指定了每條記錄的分隔符預設為’\n’即為換行分隔符,其語法為:
    [LINES
            [STARTING BY 'string']
            [TERMINATED BY 'string']
        ]
    如果您不指定LINES子句,則預設值為假設您寫下如下語句時的值:
    LINES TERMINATED BY '\n' STARTING BY ''
    如果所有您希望讀入的行都含有一個您希望忽略的共用字首,則您可以使用'prefix_string'來跳過字首(和字首前的字元)。如果某行不包括字首,則整個行被跳過。註釋:prefix_string會出現在一行的中間。

    ALTER TABLE...DISABLE KEYS
    ALTER TABLE...ENABLE KEYS

    2、select into outfile
    簡介:
    官方參考手冊:http://dev.mysql.com/doc/refman/5.6/en/select-into.html
    語法格式:
        SELECT ... INTO var_list     ##selects column values and stores them into variables.
        SELECT ... INTO OUTFILE     ##writes the selected rows to a file. Column and line terminators can be specified to produce a specific output format.
        SELECT ... INTO DUMPFILE     ##writes a single row to a file without any formatting.

    select into outfile示例:
      1)SELECT ... INTO OUTFILE 'file_name'
      2)SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
          FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
          LINES TERMINATED BY '\n'
          FROM test_table;
      3)select * from t1 into outfile '/tools/databak/dbtest_t1.txt'
        fields TERMINATED BY ','  
        lines TERMINATED BY '\n' ;
    引數說明:(參考load data引數)
    
    3、mysqlimport(不推薦使用)
    mysqlimport是作業系統命令,和load data實現功能相同,具體使用方法如下:
    語法格式:
    mysqlimport  --defaults-file='' --default-character-set=utf8  --columns=id,name --delete --fields-terminated-by='' --fields-enclosed-by='' --fields-optionally-enclosed-by='' --fields-escaped-by='' --force -h -i --ignore-lines --lines-terminated-by='' -L -p -P -S -u  dbname

    使用示例:
    mysqlimport  -L -uroot dbtest /tools/databak/t1.txt  --fields-terminated-by=','  --lines-terminated-by='\n'
    引數說明:
    mysqlimport --help
    --print-defaults        Print the program argument list and exit.
    --no-defaults           Don't read default options from any option file,
                            except for login file.
    --defaults-file=#       Only read default options from the given file #.
    --defaults-extra-file=# Read this file after the global files are read.
    --defaults-group-suffix=#
                            Also read groups with concat(group, suffix)
    --login-path=#          Read this path from the login file.
      --bind-address=name IP address to bind to.
      --character-sets-dir=name
                          Directory for character set files.
      --default-character-set=name
                          Set the default character set.
      -c, --columns=name  Use only these columns to import the data to. Give the
                          column names in a comma separated list. This is same as
                          giving columns to LOAD DATA INFILE.
      -C, --compress      Use compression in server/client protocol.
      -#, --debug[=name]  Output debug log. Often this is 'd:t:o,filename'.
      --debug-check       Check memory and open file usage at exit.
      --debug-info        Print some debug info at exit.
      --default-auth=name Default authentication client-side plugin to use.
      -d, --delete        First delete all rows from table.
      --enable-cleartext-plugin
                          Enable/disable the clear text authentication plugin.
      --fields-terminated-by=name
                          Fields in the input file are terminated by the given
                          string.
      --fields-enclosed-by=name
                          Fields in the import file are enclosed by the given
                          character.
      --fields-optionally-enclosed-by=name
                          Fields in the input file are optionally enclosed by the
                          given character.
      --fields-escaped-by=name
                          Fields in the input file are escaped by the given
                          character.
      -f, --force         Continue even if we get an SQL error.
      -?, --help          Displays this help and exits.
      -h, --host=name     Connect to host.
      -i, --ignore        If duplicate unique key was found, keep old row.
      --ignore-lines=#    Ignore first n lines of data infile.
      --lines-terminated-by=name
                          Lines in the input file are terminated by the given
                          string.
      -L, --local         Read all files through the client.
      -l, --lock-tables   Lock all tables for write (this disables threads).
      --low-priority      Use LOW_PRIORITY when updating the table.
      -p, --password[=name]
                          Password to use when connecting to server. If password is
                          not given it's asked from the tty.
      --plugin-dir=name   Directory for client-side plugins.
      -P, --port=#        Port number to use for connection or 0 for default to, in
                          order of preference, my.cnf, $MYSQL_TCP_PORT,
                          /etc/services, built-in default (3306).
      --protocol=name     The protocol to use for connection (tcp, socket, pipe,
                          memory).
      -r, --replace       If duplicate unique key was found, replace old row.
      --secure-auth       Refuse client connecting to server if it uses old
                          (pre-4.1.1) protocol.
                          (Defaults to on; use --skip-secure-auth to disable.)
      -s, --silent        Be more silent.
      -S, --socket=name   The socket file to use for connection.
      --ssl               Enable SSL for connection (automatically enabled with
                          other flags).
      --ssl-ca=name       CA file in PEM format (check OpenSSL docs, implies
                          --ssl).
      --ssl-capath=name   CA directory (check OpenSSL docs, implies --ssl).
      --ssl-cert=name     X509 cert in PEM format (implies --ssl).
      --ssl-cipher=name   SSL cipher to use (implies --ssl).
      --ssl-key=name      X509 key in PEM format (implies --ssl).
      --ssl-crl=name      Certificate revocation list (implies --ssl).
      --ssl-crlpath=name  Certificate revocation list path (implies --ssl).
      --ssl-verify-server-cert
                          Verify server's "Common Name" in its cert against
                          hostname used when connecting. This option is disabled by
                          default.
      --ssl-mode=name     SSL connection mode.
      --use-threads=#     Load files in parallel. The argument is the number of
                          threads to use for loading data.
      -u, --user=name     User for login if not current user.
      -v, --verbose       Print info about the various stages.
      -V, --version       Output version information and exit.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27067062/viewspace-2124334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章