如何使用 mysqlimport 将数据上传到 MySQL 表
将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
- 点赞
- 收藏
- 关注作者
评论(0)