Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文本文件中的数据导入mysql数据库_Mysql_Import_Text Files - Fatal编程技术网

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

如何将文本文件中的数据导入mysql数据库,mysql,import,text-files,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\u日期 数据库表:PerformanceReport 我已经创建了包含所有目标

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

345868230   1646198120  1531283146  Keyword_1531283146  1.55    252910000
745345566   1646198120  1539847239  another_1531276364  2.75    987831000
...
MySQL数据库名称:
Xml\u日期

数据库表:
PerformanceReport

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

我想将这个文本文件数据导入MySQL。我在谷歌上搜索到了一些命令,比如
loaddatainfle
,但对如何使用它感到困惑


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

它应该像

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

默认情况下,
LOAD DATA infle
使用制表符分隔,每行一行,因此应该很好地接受它。

如果您的表由其他制表符分隔,您应该像

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

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

  • 创建您的表:

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

  • 使用“加载数据”命令:

    LOAD DATA LOCAL INFILE '/tmp/foo.txt' 
    INTO TABLE foo COLUMNS TERMINATED BY '\t';
    
    如果收到无法运行此命令的警告,则必须启用此处描述的
    --local infle=1
    参数:

  • 将插入行:

    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)
    

    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 INFLE语句进行操作

    mysqlimport -u root -ptmppassword --local test employee.txt
    
    test.employee: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    

    您应该设置以下选项:

    local-infile=1
    
    输入my.cnf文件的[mysql]条目,或使用--local infle选项调用mysql客户端:

    mysql --local-infile -uroot -pyourpwd yourdbname
    
    您必须确保在[mysqld]部分中也定义了相同的参数,以启用“localinfle”功能服务器端

    这是安全限制

    LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
    

    1。如果是制表符分隔的txt文件:

    将数据本地填充'D:/MySQL/event.txt'加载到表事件中

    以“\r\n”结尾的行

    LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
    
    2。否则:

    将数据本地填充'D:/MySQL/event.txt'加载到表事件中

    以“x”结尾的字段(此处x可以是逗号“,”,制表符“\t”,分号“;”,空格“”)

    以“\r\n”结尾的行

    LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
    
    • 忽略1行跳过包含列名的初始标题行
    • 以“,”结尾的字段用于读取逗号分隔的文件
    • 如果已在Windows系统上生成文本文件,则可能必须使用以“\r\n”结尾的行才能正确读取该文件,因为Windows程序通常使用两个字符作为行终止符。某些程序(如写字板)在写入文件时可能使用\r作为行终止符。要读取此类文件,请使用以“\r”结尾的行

    对于我来说,仅仅添加“LOCAL”关键字就成功了,请查看附件中的图片以获得更简单的解决方案

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

    (a) 我在哪里得到这个错误。
    (b) 通过添加“Local”关键字解决了错误。

    您能详细说明您的答案吗?您能“plz”阅读文档吗?我添加到接受答案中的两个额外参数在注释中定义;在我的MySQL版本(版本14.14发行版5.5.41)上,我需要在这些命令中省略LOCAL。(错误1148(42000):此MySQL版本不允许使用该命令)LOCAL关键字影响文件的预期位置和错误处理。只有当您的服务器和客户端都已配置为允许时,本地才起作用。在这里分享我的愚蠢:我认为“local”在服务器上是本地的(从mysql服务器引擎的角度来看)。。。但正如你指出的Eric,这些都在文档中。它说本地选项导致mysqlimport从客户端主机读取数据文件。这意味着,如果我在自己的计算机上运行MySQL Workbench,LOAD DATA命令会在我的计算机上查找文件!您可能还想使用字符集正确解析您的文件。上面的代码如何理解这条记录将插入哪个数据库?@LOKESH:孤立地说,它不能。事先,您需要使用USE命令设置正在使用的数据库。我认为需要在数据库中创建datatable才能正常工作?@HattrickNZ是的,op已经创建了表,如问题中所述,将数据填充“/tmp/mydata.txt”加载到以“\t”结尾的table PerformanceReport字段中