LOAD DATA文法說明:
LOAD DATA INFILE句法
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 't']
[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\' ]]
[LINES TERMINATED BY 'n']
[IGNORE number LINES]
[(col_name,...)]
最簡單的方法
| 代碼如下 |
複製代碼 |
mysql>load data local infile "D:/ab.txt" into table mytbl(name,age); |
MySQL支援load data命令的資料匯入,該方式比直接的insert的效率要高,按照官方的說法是要比insert語句快上20倍。使用方式如下:
| 代碼如下 |
複製代碼 |
| mysql>load data local infile "D:/ab.txt" into table mytbl(name,age); |
使用上述的命令就可以將D:/ab.txt檔案的內容匯入到表mytbl中,其中name和age是表mytbl的欄位,對應ab.txt檔案中每行的資料。如果編譯安裝mysql時沒有指定–enable-local-infile,那麼在使用上述命令時會報如下錯誤:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
解決方式有兩種,一是重新編譯安裝加上上面的參數,而是直接用命令列執行,如下:
| 代碼如下 |
複製代碼 |
mysql -uroot -proot mydb_name --local-infile=1 -e 'load data local infile "D:/ab.txt" into table mytbl(name,age)' |
測試了一把,匯入300萬條資料時,使用load data命令的時間花銷大概在3分鐘左右,還是非常不錯的!
匯入時一些常用錯誤
系統報錯:
Data truncated for column 'f3' at row 1
可能是由於欄位定義為double型,而文字檔中是空值,將文字檔更新為:
abc;cdef;2;
再次匯入,報錯如下:
Row 1 doesn't contain data for all columns
分析原因可能是由於表中欄位一共是5個,而在文本資料來源中有了4個欄位,少1個欄位。
Data truncated for column 'f3' at row 1 ,
我理解系統應當按空值處理,即在資料庫中這個欄位default值為“-1”,
解決辦法
| 代碼如下 |
複製代碼 |
load data infile 'D:\my_program\Tek_sig\example_data1.txt' into table TABLE_NAME FIELDS TERMINATED BY ';' LINES TERMINATED BY 'n' (f1,f2,f3,f4) |