如何将文本文件中的数据导入mysql数据库
Posted
技术标签:
【中文标题】如何将文本文件中的数据导入mysql数据库【英文标题】:How to import data from text file to mysql database 【发布时间】:2012-11-14 19:30:39 【问题描述】:我有一个名为 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。我用谷歌搜索了一些命令,比如LOAD DATA INFILE
,对如何使用它感到很困惑。
如何导入此文本文件数据?
【问题讨论】:
【参考方案1】:确保您的 Local-Infile 变量设置为 True (ON)
mysql> show global variables like 'local_infile'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | OFF | +---------------+-------+ 1 row in set (0.04 sec) mysql> set global local_infile=true; Query OK, 0 rows affected (0.01 sec)
找到正确的路径来存储用于加载到 SQL 表中的 txt 文件
mysql> SELECT @@GLOBAL.secure_file_priv; +------------------------------------------------+ | @@GLOBAL.secure_file_priv | +------------------------------------------------+ | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ | +------------------------------------------------+ 1 row in set (0.00 sec)
使用路径中的数据 infile 加载(在路径中使用反斜杠)
mysql> load data infile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/text_file.txt' into table TABLE_NAME fields terminated by '\t' lines terminated by '\n';
【讨论】:
【参考方案2】:对我来说,只需添加“LOCAL”关键字就可以了,请查看附件图片以获得更简单的解决方案。
我附上的图片包含两个用例:
(a) 我在哪里得到这个错误。 (b) 只需添加“Local”关键字即可解决错误。
【讨论】:
【参考方案3】:LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
IGNORE 1 LINES 跳过包含列名的初始标题行
FIELDS TERMINATED BY ',' 是读取逗号分隔的文件
如果您在 Windows 系统上生成了文本文件,则可能必须使用 LINES TERMINATED BY '\r\n' 来正确读取文件,因为 Windows 程序通常使用两个字符作为行终止符。某些程序(例如写字板)在写入文件时可能会使用 \r 作为行终止符。要读取此类文件,请使用 LINES TERMINATED BY '\r'。
【讨论】:
【参考方案4】: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' 终止的行;
【讨论】:
【参考方案5】:你应该设置选项:
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;
【讨论】:
【参考方案6】: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
【讨论】:
【参考方案7】:使用 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 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)
【讨论】:
在我的 MySQL 版本(Ver 14.14 Distrib 5.5.41)上,我需要从这些命令中省略 LOCAL。 (ERROR 1148 (42000): 该 MySQL 版本不允许使用的命令) LOCAL 关键字会影响文件的预期位置和错误处理。 LOCAL 仅在您的服务器和客户端都已配置为允许时才有效。 dev.mysql.com/doc/refman/5.0/en/load-data.html 在这里分享我的愚蠢:我认为“本地”在服务器上是本地的(从 mysql 服务器引擎的角度来看)......但正如你指出的 Eric,它都在文档中.它说 LOCAL 选项导致 mysqlimport 从客户端主机读取数据文件。这意味着如果我在自己的计算机上运行 MySQL Workbench,LOAD DATA 命令会在我的计算机上查找文件! 您可能还想使用 CHARSET SET 正确解析您的文件【参考方案8】:如果您的表格由制表符以外的其他表格分隔,则应将其指定为...
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
【讨论】:
你能详细说明你的答案吗?【参考方案9】:它应该像...一样简单
LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;
默认LOAD DATA INFILE
使用制表符分隔,每行一行,所以应该接受它就好了。
【讨论】:
上面的代码如何理解这将在哪个数据库中插入记录? @LOKESH:单独来看,它不能。事先,您需要使用 USE 命令设置要使用的数据库。 我认为数据表也需要在数据库中创建才能正常工作? @HattrickNZ 是的,并且操作已经创建了问题中提到的表 LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport FIELDS TERMINATED BY '\t'以上是关于如何将文本文件中的数据导入mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章