MySql数据库·数据批量处理
2024-04-09 20:30:44  阅读数 671

一、定义:

  • 主要分为2个部分:导入数据、导出数据
  • 导入数据:一次性向表里存储多行数据
  • 导出数据:一次性把表里的多行数据都取出来

二、MySql检索路径:

查看默认的检索目录:

  • 数据导入或导出时,存放数据的文件必须在mysql服务要求的目录下
  • 安装数据库服务软件时,会自动创建检索目录/var/lib/mysql-files/
mysql> show variables like "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                          |
+------------------+-----------------------+
| secure_file_priv  | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)

自定义检索目录:

  • 可以自定义创建检索目录
  • 自定义创建的检索目录的父目录必须是mysql用户对其有r-x权限
# 修改mysql配置文件,重新设定检索慕课
[root@host50 ~]# vim /etc/my.cnf
[mysqld]
# 手动添加该行,重新定义检索目录
secure_file_priv=/myload      
:wq
# 创建自定义检索目录
[root@host50 ~]# mkdir /myload
# 修改属主为mysql用户
[root@host50 ~]# chown mysql /myload/

[root@host50 ~]# setenforce 0
# 重启mysql服务生效配置
[root@host50 ~]# systemctl  restart mysqld

# 数据库管理员登录后查看
mysql> show variables like  "secure_file_priv";
+------------------+----------+
| Variable_name    | Value      |
+------------------+----------+
| secure_file_priv   | /myload/ |
+------------------+----------+
1 row in set (0.00 sec)

三、MySql数据导入导出命令:

数据导入:

  • 把系统文件的内容存储到数据库服务的表里
  • 文件内容务必要规律整齐
mysql> load data infile "/检索目录/文件名" into table 库名.表名   
fields terminated by "文件中列的间隔符号"   
lines terminated by "\n";  # 文件中行的结束符号,一般都为“\n”

数据导出:

  • 把数据库服务的表里数据保存到系统文件里,需要注意的是导出的数据不包括表头名 ,只有表里的行。
  • 导出的数据由select查询命令决定存放数据的文件名,不需要事先创建且具有唯一
# 数据导出命令格式1  
mysql> select 字段名列表 from 库.表 [where 条件] 
into outfile "/检索目录/文件名" ;

# 数据导出命令格式2
# fields terminated by:文件中的列的间隔符号,不指定默认是一个 tab 键的宽度
mysql> select 字段名列表 from 库.表 [where 条件]  
into outfile "/检索命令名/文件名" 
fields terminated by "符号";
                    
# 数据导出命令格式3
# lines terminated by:文件中行间隔符号,不指定默认一条记录就是文件中的1行
mysql> select 字段名列表 from 库.表 [where 条件]
into outfile "/检索命令名/文件名" 
fields terminated by "符号"
lines terminated by "符号";

四、数据导入操作步骤:

  1. 建库
  2. 建表:根据导入文件的内容创建(表头名 表头个数 ),根据文件内容定义确定表头所使用的数据类型
  3. 把系统文件拷贝的检索目录里
  4. 导入数据
  5. 查看表记录

实操(将/etc/passwd文件导入db1库的t3表里)

第一步:创建库

  • 创建db1库
# 创建db1库
mysql> create database if not exists db1;   

第二步:建表

  • 创建db1.t3表
mysql> create table db1.t3(
  name varchar(50) , 
  password char(1) , 
  uid int , 
  gid int , 
  comment varchar(200) , 
  homedir varchar(60) , 
  shell  varchar(30) 
);
  • 查看表头
mysql> desc db1.t3; 
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| name     | char(50)     | YES  |     | NULL    |       |  # 用户名
| password | char(1)      | YES  |     | NULL    |       |  # 密码
| uid      | int(11)      | YES  |     | NULL    |       |  # UID号
| gid      | int(11)      | YES  |     | NULL    |       |  # GID号
| comment  | varchar(200) | YES  |     | NULL    |       |  # 用户说明信息
| homedir  | varchar(60)  | YES  |     | NULL    |       |  # 用户家目录
| shell    | varchar(30)  | YES  |     | NULL    |       |  # 解释器
+----------+--------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

第三步:把系统文件拷贝的检索目录里

  • 拷贝文件到自定义的检索目录
  • 在mysql环境中,使用system + 命令,执行Linux环境的语句
mysql> system cp /etc/passwd /myload/  

第四步:导入数据

mysql> load data infile "/myload/passwd" into table db1.t3
fields terminated by ":"  
lines terminated by "\n" ;

第五步:查看表记录

mysql> select * from db1.t3;
+----+------+----------+-----+-----+---------+---------+-----------+
| id | name | password | uid | gid | comment | homedir |   shell   |
+----+------+----------+-----+-----+---------+---------+-------+
|  1 | root |    x     |  0  |  0  | root    | /root   | /bin/bash |
...
| 22 | mysql|    x     |  27 |  27 | MySQL   | /var/lib/mysql | /bin/false |
+----+------+----------+-----+-----+---------+----------------+------------+
22 rows in set (0.00 sec)