如何使用 mysqlimport 将数据上传到 MySQL 表

举报
Tiamo_T 发表于 2021/11/25 14:16:18 2021/11/25
【摘要】 将text、csv 和 excel 文件中的多行数据上传到 MySQL 表中是管理 MySQL 数据库的系统管理员和 DBA 的例行任务。本文解释了如何使用mysqlimport和“load data local infle”方法将数据从文件导入MySQL表的4个实际示例。如果要备份和恢复 MySQL 数据库,请不要导入数据,请使用mysqldump或mysqlhotcopy。创建员工表和e...

将text、csv 和 excel 文件中的多行数据上传到 MySQL 表中是管理 MySQL 数据库的系统管理员和 DBA 的例行任务。本文解释了如何使用mysqlimport和“load data local infle”方法将数据从文件导入MySQL表的4个实际示例。如果要备份和恢复 MySQL 数据库,请不要导入数据,请使用mysqldump或mysqlhotcopy。

创建员工表和employee.txt 数据文件

对于本文中提到的示例,让我们创建一个非常简单的员工表,其中包含三列——员工编号、员工姓名和职位。

# mysql -u root -ptmppassword
mysql> use test
Database changed
mysql> create table employee
    -> (
    -> empno int,
    -> ename varchar(15),
    -> job varchar(10)
    -> );
Query OK, 0 rows affected (0.01 sec)

创建一个测试数据文件employee.txt,其中的字段由制表符分隔,如下所示。

# cat employee.txt
100     John Doe        DBA
200     John Smith      Sysadmin
300     Raj Patel       Developer

1.上传制表符分隔的数据文件到MySQL表

使用mysqlimport将employee.txt数据文件导入到test数据库的employee表中,如下图:

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

验证记录是否已成功上传。

# mysql -u root -ptmppassword
mysql> use test;
mysql> select * from employee;
+-------+------------+-----------+
| empno | ename      | job       |
+-------+------------+-----------+
|   100 | John Doe   | DBA       |
|   200 | John Smith | Sysadmin  |
|   300 | Raj Patel  | Developer |
+-------+------------+-----------+
3 rows in set (0.00 sec)


注意:在 mysqlimport 中,数据文件的名称应该与表的名称匹配。数据文件的扩展名可以是任何东西。在上面的例子中,只有employee.* 数据文件可以用来上传数据到employee 表。当文件名与表名不同时,您将收到以下错误消息:

# mysqlimport -u root -ptmppassword --local test emp.txt
mysqlimport: Error: Table 'test.emp' doesn't exist, when using table: emp
[Note: The table name is employee. So, datafile name should be employee.*]

2.将多个数据文件导入多个MySQL表

以下示例将数据从两个不同的数据文件上传到两个不同的表。即它上传employee.txt 到employee 表和manager.txt 到manager 表。


# mysqlimport -u root -ptmppassword --local test employee.txt manager.txt

3.使用LOAD DATA LOCAL INFILE上传数据到MySQL表

mysqlimport 客户端只是 LOAD DATA LOCAL INFILE SQL 语句的命令行界面。mysqlimport 的大多数选项直接对应于“load data local infile”语法的子句。您可以使用“load data local infile”代替 mysqlimport 执行示例#1 中解释的相同上传,如下所述:

# mysql -u root -ptmppassword
mysql> use test;
mysql> LOAD DATA LOCAL INFILE '/home/ramesh/employee.txt'
    -> INTO TABLE employee
    -> FIELDS TERMINATED BY '\t'
    -> LINES TERMINATED BY '\n'
    -> (empno, ename, job);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from employee;
+-------+------------+-----------+
| empno | ename      | job       |
+-------+------------+-----------+
|   100 | John Doe   | DBA       |
|   200 | John Smith | Sysadmin  |
|   300 | Raj Patel  | Developer |
+-------+------------+-----------+
3 rows in set (0.00 sec)

4.最常用的mysqlimport选项

最常用的 mysqlimport 选项显示在下面的示例中。这些选项中的大多数都是不言自明的。

  • compress : 压缩客户端和服务器之间发送的所有信息
  • delete当您想在导入文本文件之前清空表格时,此选项非常方便
  • local:从客户端主机本地读取输入文件
  • lock-tables在处理任何文本文件之前锁定所有表以进行写入。这确保所有表在服务器上同步。
# mysqlimport \
    --user=root \
    --password=tmppassword \
    --columns=empno,ename,job \
    --compress \
    --delete \
    --fields-optionally-enclosed-by='"' \
    --fields-terminated-by='\t' \
    --fields-escaped-by='' \
    --lines-terminated-by='\n' \
    --local \
    --lock-tables \
    --verbose \
    test employee.txt

上述 mysqlimport 命令的输出:

Connecting to localhost
Selecting database test
Locking tables for write
Deleting the old data from table employee
Loading data from LOCAL file: /home/ramesh/employee.txt into employee
test.employee: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
Disconnecting from localhost
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。