1. 程式人生 > >mysql 開發進階篇系列 50 表的資料匯入(load data infile,mysqlimport )

mysql 開發進階篇系列 50 表的資料匯入(load data infile,mysqlimport )

一.概述

上篇講到的表的資料匯出(select .. into outfile 或者mysqldump),這篇繼續講表的資料匯入,匯入也同樣有二個方法,分別是load data infile... 和mysqlimport。本質是一樣的,區別在於前者是mysql內部執行, 後者是mysql 外部執行。

  1.  load data infile 方法1

-- 格式語法如下:
load data [local] infile 'filename' info table tablename[option]

Option選項

說明

Fields terminated by 'string'

 欄位分隔符, 預設為製表符 ' \t'

Fields [optionally] enclosed by 'char'

 欄位引用符, 如果加了optionally,則只用在char, varcahr, text 等字元型欄位上。

Fields escaped by 'char'

轉義字元, 預設為 '\n'

Lines starting by 'string'

每行前都加此字串, 預設''

Lines terminated by 'string'

行結束符,預設為'\n'

Ignore number lines

忽略輸入檔案中的前n 行資料

(col_name_or_user_var, ..)

按照列出的欄位順序和欄位數量載入資料

Set col_name=expr, ...

將列做一定的數值轉換後再載入

    下面將/tmp/ testbackup1.txt 中的資料載入到表testbackup中,案例如下:

-- 先備份
CREATE TABLE testbackup2 SELECT * FROM  testbackup;
-- 刪除
DELETE FROM testbackup
-- 全部匯入(12行受影響)
LOAD DATA INFILE '/tmp/testbackup1.txt' INTO
TABLE testbackup FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 匯入過濾前二行(10行受影響) DELETE FROM testbackup LOAD DATA INFILE '/tmp/testbackup1.txt' INTO TABLE testbackup FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 2 LINES -- 在上面的基本上,指定載入部分列和列順序 DELETE FROM testbackup LOAD DATA INFILE '/tmp/testbackup1.txt' INTO TABLE testbackup FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 2 LINES(id,`name`) -- 將id列的內容+10後再載入到表中(此時id從11開始) DELETE FROM testbackup LOAD DATA INFILE '/tmp/testbackup1.txt' INTO TABLE testbackup FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET id=id+10

         

  2.  mysqlimport 方法2

--格式語法如下:
mysqlimport -uroot -p  [-- local] dbname order_tab.txt [option]

Option選項

說明

--fields-terminated-by =name

欄位分隔符

--fields-enclosed-by=name

欄位引用符

--fields-optionally-enclosed-by=name

欄位引用符, 加了optionally,則只用在char, varcahr, text 等字元型欄位上。

--fields-escaped-by=name

轉義字元

--lines-terminated-by =name

記錄結束符

--Ignore-lines=number

忽略輸入檔案中的前n 行資料

-- 注意檔名(testbackup.txt)要與test庫中的testbackup表名一致,匯入指令碼如下:
[[email protected] ~]# mysqlimport -uroot -p test /tmp/testbackup.txt --fields-terminated-by=',' --fields-enclosed-by='"'
Enter password: 
test.testbackup: Records: 12  Deleted: 0  Skipped: 0  Warnings: 0

  注意: 如果匯入匯出是跨平臺操作的(windows和linux),那麼引數--lines-terminated-by的值在windows上為--lines-terminated-by='\r\n' 。在linux上為--lines-terminated-by='\n'。 上面的案例中--lines-terminated-by的值預設是'\n' 。 對於load data infile是匯入資料最快的方法,在管理維護中使用很也頻繁,應此要重點掌握。