如何将文本文件中的数据导入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”结尾的行李>
(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字段中