天天看點

開發指南—DML語句—LOAD DATA

本文介紹在PolarDB-X中使用load data進行資料導入的相關限制和注意事項。

注意事項

  • 使用load data進行資料導入時,load data語句并非一個事務,是以各種原因(如資料庫當機等)可能導緻部分資料插入,剩餘部分未插入。
  • 用戶端需要開啟local-infile。

文法

LOAD DATA   
    [LOCAL] 
    INFILE 'file_name' 
    [REPLACE | IGNORE] 
    INTO TABLE tbl_name 
    [CHARACTER SET charset_name] 
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string'] 
        [ENCLOSED BY 'char'] 
        [ESCAPED BY 'char'] 
    ]
    [LINES
        [STARTING BY 'string'] 
        [TERMINATED BY 'string'] 
    ]
    [IGNORE number {LINES | ROWS}] 
    [(col_name_or_mask [, col_name_or_mask] ...)]      

參數說明

參數名稱 說明
LOAD DATA [LOCAL] INFILE 檔案位于服務端還是client端。
file_name 使用相對路徑時,為相對于用戶端啟動時的路徑。
REPLACE 導入資料時,遇到主鍵重複則強制用目前資料覆寫已有資料。
IGNORE 導入資料時,遇到主鍵重複則自動忽略該行。
[FIELDS] TERMINATED BY 'string' 定義每行資料的分隔符,預設為\t。
[FIELDS] ENCLOSED BY 'char' 每列資料的包圍符。例如,某一列資料為"test",定義enclosed by '"'後,導入資料時先将"test"前後的"移除,然後再導入資料。
[LINES] TERMINATED BY 'string' 定義行分隔符,預設為\n。
IGNORE number LINES 導入資料時忽略開始的某幾行。例如,

IGNORE 1 LINES

,導入資料時忽略第一行資料。
(col_name_or_mask [, col_name_or_mask] ...)
  1. 設定導入的列,如果不設定,預設按照表中的列順序來導入資料。
  2. 掩蓋掉檔案中的某些列,使檔案中對應列失效,例如,

    table test(x int, y int)

    ,導入檔案有三列,導入時使用

     (x, @name, y) 

    則會忽略檔案中的第二列,使用第一列填充x,使用第二列填充y。

示例

建立測試表:

CREATE TABLE test ( a int(11) NOT NULL DEFAULT '0',  b varchar(8) NOT NULL,  PRIMARY KEY (a)  ) DBPARTITION by hash(a);      

本地待導入檔案:

x,y
test1,2
test2,3
test3,4
test4,5
test5,6
test7,8
test8,9      

load data語句:

LOAD DATA LOCAL INFILE '~/test.txt' IGNORE INTO TABLE test FIELDS TERMINATED BY ',' LINES STARTING BY 'test' TERMINATED BY '\n' IGNORE 1 LINES;      

結果如下:

mysql> select * from test order by a;
+------+------+
| a    | b    |
+------+------+
|    1 | 2    |
|    2 | 3    |
|    3 | 4    |
|    4 | 5    |
|    5 | 6    |
|    7 | 8    |
|    8 | 9    |
+------+------+
7 rows in set (0.02 sec)