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

Shi*_*dla 50 mysql import text-files

我有一个名为350MB的文件,text_file.txt其中包含此制表符分隔的数据:

345868230   1646198120  1531283146  Keyword_1531283146  1.55    252910000
745345566   1646198120  1539847239  another_1531276364  2.75    987831000
...
Run Code Online (Sandbox Code Playgroud)

MySQL数据库名称: Xml_Date

数据库表: PerformanceReport

我已经创建了包含所有目标字段的表.

我想将这个文本文件数据导入MySQL.我用Google搜索并发现了一些命令,LOAD DATA INFILE并且对如何使用它感到很困惑.

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

Omn*_*rys 68

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

LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;
Run Code Online (Sandbox Code Playgroud)

默认情况下LOAD DATA INFILE使用制表符分隔,每行一行,所以应该很好地使用它.

  • 上面的代码如何理解这将在哪个数据库中插入记录? (2认同)

Eri*_*ski 50

关于使用MySQL的LOAD DATA命令的演练:

  1. 创建你的表:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建制表符分隔文件(请注意列之间有选项卡):

    1   Heart disease kills     1.2
    2   one out of every two    2.3
    3   people in America.      4.5
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用load data命令:

    LOAD DATA LOCAL INFILE '/tmp/foo.txt' 
    INTO TABLE foo COLUMNS TERMINATED BY '\t';
    
    Run Code Online (Sandbox Code Playgroud)

    如果您收到无法运行此命令的警告,则必须启用--local-infile=1此处描述的参数:如何更正MySQL加载错误

  4. 行插入:

    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)

如何指定将文本文件列加载到哪些列:

像这样:

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;
Run Code Online (Sandbox Code Playgroud)

文件内容放入变量@ col1,@ col2,@ col3.myid获取第1列,mydecimal获取第3列.如果执行此操作,则会省略第2行:

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)
Run Code Online (Sandbox Code Playgroud)


pei*_*ixe 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
Run Code Online (Sandbox Code Playgroud)

  • 你能详细说明你的答案吗? (2认同)
  • 你能"阅读"文档吗?我在接受的答案中添加的两个额外参数在评论中定义; 用#. (2认同)