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' INTOTABLE 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是匯入資料最快的方法,在管理維護中使用很也頻繁,應此要重點掌握。