我有一个名为text_file.txt
的350MB文件,其中包含此制表符分隔数据:
345868230 1646198120 1531283146 Keyword_1531283146 1.55 252910000
745345566 1646198120 1539847239 another_1531276364 2.75 987831000
...
MySQL数据库名称:Xml_Date
数据库表:PerformanceReport
我已经创建了包含所有目标字段的表。
我想将此文本文件数据导入MySQL。我用Google搜索并发现了一些像LOAD DATA INFILE
这样的命令,并对如何使用它感到困惑。
如何导入此文本文件数据?
答案 0 :(得分:66)
它应该像......一样简单。
LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;
默认情况下,LOAD DATA INFILE
使用制表符分隔,每行一行,所以应该可以正常使用。
答案 1 :(得分:49)
使用MySQL的LOAD DATA命令进行演练:
创建表格:
CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
创建制表符分隔文件(请注意列之间有标签):
1 Heart disease kills 1.2
2 one out of every two 2.3
3 people in America. 4.5
使用load data命令:
LOAD DATA LOCAL INFILE '/tmp/foo.txt'
INTO TABLE foo COLUMNS TERMINATED BY '\t';
如果您收到无法运行此命令的警告,则必须启用此处所述的--local-infile=1
参数:How can I correct MySQL Load Error
插入行:
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
检查它是否有效:
mysql> select * from foo;
+------+----------------------+-----------+
| myid | mymessage | mydecimal |
+------+----------------------+-----------+
| 1 | Heart disease kills | 1.2000 |
| 2 | one out of every two | 2.3000 |
| 3 | people in America. | 4.5000 |
+------+----------------------+-----------+
3 rows in set (0.00 sec)
如何指定将文本文件列加载到哪些列:
像这样:
LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
(@col1,@col2,@col3) set myid=@col1,mydecimal=@col3;
文件内容放入变量@ col1,@ col2,@ col3。 myid获取第1列,mydecimal获取第3列。如果这样运行,它将省略第二行:
mysql> select * from foo;
+------+-----------+-----------+
| myid | mymessage | mydecimal |
+------+-----------+-----------+
| 1 | NULL | 1.2000 |
| 2 | NULL | 2.3000 |
| 3 | NULL | 4.5000 |
+------+-----------+-----------+
3 rows in set (0.00 sec)
答案 2 :(得分:13)
如果您的表格由其他人分隔,则应将其指定为...
LOAD DATA LOCAL
INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport
COLUMNS TERMINATED BY '\t' ## This should be your delimiter
OPTIONALLY ENCLOSED BY '"'; ## ...and if text is enclosed, specify here
答案 3 :(得分:3)
LOAD DATA INFILE语句以非常高的速度将文本文件中的行读取到表中。
LOAD DATA INFILE '/tmp/test.txt'
INTO TABLE test
FIELDS TERMINATED BY ','
LINES STARTING BY 'xxx';
如果数据文件如下所示:
xxx"abc",1
something xxx"def",2
"ghi",3
结果行将是(" abc",1)和(" def",2)。跳过文件中的第三行,因为它不包含前缀。
LOAD DATA INFILE 'data.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
您还可以使用mysqlimport实用程序加载数据文件;它通过向服务器发送LOAD DATA INFILE语句来进行操作
mysqlimport -u root -ptmppassword --local test employee.txt
test.employee: Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
答案 4 :(得分:0)
您应该设置选项:
local-infile=1
进入my.cnf文件的[mysql]条目或使用--local-infile选项调用mysql客户端:
mysql --local-infile -uroot -pyourpwd yourdbname
您必须确保在[mysqld]部分中定义了相同的参数,以启用“本地infile”功能服务器端。
这是一项安全限制。
LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
答案 5 :(得分:0)
<强> 1。如果它是制表符分隔的txt文件:
LOAD DATA LOCAL INFILE'D:/MySQL/event.txt'INTO TABLE事件
由'\ r \ n';
终止的行<强> 2。否则:
LOAD DATA LOCAL INFILE'D:/MySQL/event.txt'INTO TABLE事件
终止于'x'的字段(此处x可以是逗号',',制表符'\ t',分号';',空格'')
由'\ r \ n';
终止的行答案 6 :(得分:0)
LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
答案 7 :(得分:0)