如何将数据从文本文件导入mysql数据库

时间:2012-11-27 08:10:23

标签: mysql import text-files

我有一个名为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这样的命令,并对如何使用它感到困惑。

如何导入此文本文件数据?

8 个答案:

答案 0 :(得分:66)

它应该像......一样简单。

LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;

默认情况下,LOAD DATA INFILE使用制表符分隔,每行一行,所以应该可以正常使用。

答案 1 :(得分:49)

使用MySQL的LOAD DATA命令进行演练:

  1. 创建表格:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
    
  2. 创建制表符分隔文件(请注意列之间有标签):

    1   Heart disease kills     1.2
    2   one out of every two    2.3
    3   people in America.      4.5
    
  3. 使用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

  4. 插入行:

    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    
  5. 检查它是否有效:

    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)
    
  6. 如何指定将文本文件列加载到哪些列:

    像这样:

    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;
  • IGNORE 1行可跳过包含列名称的初始标题行
  • FIELDS TERMINATED BY','是读取以逗号分隔的文件
  • 如果已在Windows系统上生成了文本文件,则可能必须使用'\ r \ n'终止的行来正确读取该文件,因为Windows程序通常使用两个字符作为行终止符。某些程序(例如写字板)在写入文件时可能使用\ r作为行终止符。要读取此类文件,请使用以'\ r'结尾的行。

答案 7 :(得分:0)

enter image description here

对于我来说,只需添加“ LOCAL”关键字即可达到目的,请参阅附件中的图片以获取更简单的解决方案。

我附带的图像包含两个用例:

(a)我在哪里遇到此错误。 (b)只需添加“本地”关键字即可解决错误。