MySQL批量导入数据

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

  在我们使用数据库的过程中,避免不了备份、恢复、导入、导出数据,方法比较多,根据不同的数据量选择不同的方法,会提高我们的工作效率,

(1)从表A导入数据到表B;一般涉及到表结构相同或者表结构不同等情况,数据量少的时候效率很高,

测试表A为 send_done,创建语句为下面内容,

1
2
3
4
5
6
7
8
9
10
11
CREATE  TABLE  `send_done` (
   `id`  bigint (20)  NOT  NULL  AUTO_INCREMENT,
   `phone`  varchar (20)  NOT  NULL ,
   `content`  varchar (1000)  NOT  NULL ,
   `intime` datetime  NOT  NULL ,
   `state`  int (11)  NOT  NULL ,
   `sendtime` datetime  DEFAULT  NULL ,
   `statcode`  varchar (20)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`),
   KEY  `ind_state` (`state`)
) ENGINE=InnoDB AUTO_INCREMENT=1166482  DEFAULT  CHARSET=utf8
1
2
3
4
5
6
7
8
9
10
11
CREATE  TABLE  `send_sf_done` (
   `id`  bigint (20)  NOT  NULL  AUTO_INCREMENT,
   `phone`  varchar (20)  NOT  NULL ,
   `content`  varchar (1000)  NOT  NULL ,
   `intime` datetime  NOT  NULL ,
   `state`  int (11)  NOT  NULL ,
   `sendtime` datetime  DEFAULT  NULL ,
   `statcode`  varchar (20)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`),
   KEY  `ind_state` (`state`)
) ENGINE=InnoDB AUTO_INCREMENT=1166482  DEFAULT  CHARSET=utf8

表A的数据
MariaDB [wangjubao]> select  *  from  send_done;
+---------+-------------+--------------------------------+---------------------+-------+---------------------+---------------------+
| id      | phone       | content                        | intime              | state | sendtime            | statcode            |
+---------+-------------+--------------------------------+---------------------+-------+---------------------+---------------------+
| 1166459 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:33:02 |     1 | 2016-11-04 10:44:21 | 2114782562554393363 |
| 1166461 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:45:53 |    -3 | 2016-11-04 10:46:05 | -3                  |
| 1166463 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:47:42 |    -3 | 2016-11-04 10:47:54 | -3                  |
| 1166465 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:49:08 |    -3 | 2016-11-04 10:49:19 | -3                  |
| 1166467 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:55:33 |     1 | 2016-11-04 10:55:53 | 2114782569505307918 |
| 1166469 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 11:10:20 |    -3 | 2016-11-04 
+---------+-------------+--------------------------------+---------------------+-------+---------------------+---------------------+
1、从表A导入表B
 insert  into  send_done  select *  from send_sf_done; (字段全部一样时不用写字段)
 2、从表A导出文本加载到B
 导出数据
 select   *  from  send_done  into outfile "/tmp/winn.sql ";
 
 MariaDB [wangjubao]>  select   *  from  send_done  into outfile "/tmp/winn.sql "
    -> ;
Query OK, 12 rows affected (0.00 sec)
 检查导出文件
[root@slave1 tmp]# cat  winn.sql 
1166459 15021970243     冬天到了【云信测试】    2016-11-04 10:33:02     1       2016-11-04 10:44:21     2114782562554393363
1166461 15021970243     冬天到了【云信测试】    2016-11-04 10:45:53     -3      2016-11-04 10:46:05     -3
1166463 15021970243     冬天到了【云信测试】    2016-11-04 10:47:42     -3      2016-11-04 10:47:54     -3
1166465 15021970243     冬天到了【云信测试】    2016-11-04 10:49:08     -3      2016-11-04 10:49:19     -3
11:23:36     2114782586244477897 
 
删除之前从A表导入B表的数据,
MariaDB [wangjubao]> delete   from send_sf_done;
Query OK, 12 rows affected (0.00 sec)

MariaDB [wangjubao]> select  *  from  send_sf_done;
Empty set (0.00 sec)

加载导出的文件(load data)

load data infile '/tmp/winn.sql' into table  send_sf_done;

MariaDB [wangjubao]> load data infile '/tmp/winn.sql' into table  send_sf_done;
Query OK, 12 rows affected (0.00 sec)                
Records: 12  Deleted: 0  Skipped: 0  Warnings: 0

MariaDB [wangjubao]> select  *  from  send_sf_done;
+---------+-------------+--------------------------------+---------------------+-------+---------------------+---------------------+
| id      | phone       | content                        | intime              | state | sendtime            | statcode            |
+---------+-------------+--------------------------------+---------------------+-------+---------------------+---------------------+
| 1166459 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:33:02 |     1 | 2016-11-04 10:44:21 | 2114782562554393363 |
| 1166461 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:45:53 |    -3 | 2016-11-04 10:46:05 | -3                  |
| 1166463 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:47:42 |    -3 | 2016-11-04 10:47:54 | -3                  |
| 1166465 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:49:08 |    -3 | 2016-11-04 10:49:19 | -3                  |
| 1166467 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 10:55:33 |     1 | 2016-11-04 10:55:53 | 2114782569505307918 |
| 1166469 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 11:10:20 |    -3 | 2016-11-04 11:15:17 | -3                  |
| 1166471 | 15021970243 | 冬天到了【云信测试】           | 2016-11-04 11:23:16 |     1 | 2016-11-04 11:23:18 | 2114782586069773509 |
|
+---------+-------------+--------------------------------+---------------------+-------+---------------------+---------------------+

注意:

load  data  infile  默认的列与列间的分隔符是制表符,当出现其他分割符时就会出现加载数据不匹配的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#创建 user 表   
CREATE  TABLE  ` user ` (
   `username`  varchar (10)  DEFAULT  NULL ,
   `sex` tinyint(4)  DEFAULT  NULL ,
   `birth`  date  DEFAULT  NULL ,
   `address`  varchar (50)  DEFAULT  NULL ,
   `phone`  varchar (15)  DEFAULT  NULL ,
   `email`  varchar (50)  DEFAULT  NULL
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8
 
#相关的数据( select  或者outfile导出都可以)
winner  1       1993-11-25      甘肃西和县      18393354445     18393355445@163.com
linux   1       1993-11-25      甘肃西和县      18393354445     18393355445@163.com
linux   1       1993-11-27      上海松江        1839335442      1839335544@163.com
linux   1       1993-11-25      甘肃西和县      18393354445     18393355445@163.com
linux   1       1993-11-27      上海松江        1839335442      1839335544@163.com
linux   1       1993-11-27      上海松江        1839335442      1839335544@163.com
linux   1       1993-11-25      甘肃西和县      18393354445     18393355445@163.com
linux   1       1993-11-27      上海松江        1839335442      1839335544@163.com
linux   1       1993-11-27      上海松江        1839335442      1839335544@163.com
linux   1       1993-11-27      上海松江        1839335442      1839335544@163.com
docker  1       1993-11-27      上海松江        1839335442      1839ss5544@163.com
将分隔符换成逗号 ","
awk -F "\t"   '{print $1","$2","$3","$4","$5","$6}'   user .txt  > user .awk
或者:sed   "s/\t/,/g"   user .txt > user .txt
winner,1,1993-11-25,甘肃西和县,18393354445,18393355445@163.com
linux,1,1993-11-25,甘肃西和县,18393354445,18393355445@163.com
linux,1,1993-11-27,上海松江,1839335442,1839335544@163.com
linux,1,1993-11-25,甘肃西和县,18393354445,18393355445@163.com
linux,1,1993-11-27,上海松江,1839335442,1839335544@163.com
linux,1,1993-11-27,上海松江,1839335442,1839335544@163.com
linux,1,1993-11-25,甘肃西和县,18393354445,18393355445@163.com
linux,1,1993-11-27,上海松江,1839335442,1839335544@163.com
linux,1,1993-11-27,上海松江,1839335442,1839335544@163.com
linux,1,1993-11-27,上海松江,1839335442,1839335544@163.com
docker,1,1993-11-27,上海松江,1839335442,1839ss5544@163.com
 
加载数据:
mysql>  LOAD  DATA INFILE  '/var/lib/mysql/Docker/user.awk'  INTO  TABLE  user ;
Query OK, 11  rows  affected, 66 warnings (0.05 sec)
Records: 11  Deleted: 0  Skipped: 0  Warnings: 66
 
mysql>  select   from  user ;
winner,1,1 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL       
指定分隔符
LOAD  DATA INFILE  '/var/lib/mysql/Docker/user.awk'  INTO  TABLE  user  FIELDS  TERMINATED  BY  ','
查看插入结果:
  linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| linux,1,19 |  NULL  NULL        NULL             NULL         NULL                 |
| docker,1,1 |  NULL  NULL        NULL             NULL         NULL                 |
| winner     |    1 | 1993-11-25 | 甘肃西和县      | 18393354445 | 18393355445@163.com |
| linux      |    1 | 1993-11-25 | 甘肃西和县      | 18393354445 | 18393355445@163.com |
| linux      |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839335544@163.com  |
| linux      |    1 | 1993-11-25 | 甘肃西和县      | 18393354445 | 18393355445@163.com |
| linux      |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839335544@163.com  |
| linux      |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839335544@163.com  |
| linux      |    1 | 1993-11-25 | 甘肃西和县      | 18393354445 | 18393355445@163.com |
| linux      |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839335544@163.com  |
| linux      |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839335544@163.com  |
| linux      |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839335544@163.com  |
| docker     |    1 | 1993-11-27 | 上海松江        | 1839335442  | 1839ss5544@163.com


方法3、 使用select 导出数据
  mysql  -u  root  -p  -e  "select  *  from wangjubao.send_done;" >/tmp/winner2.sql
检查数据
[root@slave1 tmp]# cat  winner2.sql 
id      phone   content intime  state   sendtime        statcode
1166459 15021970243     冬天到了【云信测试】    2016-11-04 10:33:02     1       2016-11-04 10:44:21     2114782562554393363
1166461 15021970243     冬天到了【云信测试】    2016-11-04 10:45:53     -3      2016-11-04 10:46:05     -3
1166463 15021970243     冬天到了【云信测试】    2016-11-04 10:47:42     -3      2016-11-04 10:47:54     -3
1166465 15021970243     冬天到了【云信测试】    2016-11-04 10:49:08     -3      2016-11-04 10:49:19     -3
1166467 15021970243     冬天到了【云信测试】    2016-11-04 10:55:33     1       2016-11-04 10:55:53     2114782569505307918

处理第一行
sed   -i  "1,1d"  /tmp/winner2.sq 
处理结果
1166459 15021970243     冬天到了【云信测试】    2016-11-04 10:33:02     1       2016-11-04 10:44:21     2114782562554393363
1166461 15021970243     冬天到了【云信测试】    2016-11-04 10:45:53     -3      2016-11-04 10:46:05     -3
1166463 15021970243     冬天到了【云信测试】    2016-11-04 10:47:42     -3      2016-11-04 10:47:54     -3
1166465 15021970243     冬天到了【云信测试】    2016-11-04 10:49:08     -3      2016-11-04 10:49:19     -3
1166467 15021970243     冬天到了【云信测试】    2016-11-04 10:55:33     1       2016-11-04 10:55:53     2114782569505307918
   使用load加载数据就可以了

方法4、利用CSV存储引擎导入数据

  像nivcate之类的工具,我们都可以导入CSV,excel,txt等格式的数据,在研究完CSV存储引擎后,发现CSV存储引擎,可以直接向CSV文件导入到数据库中,CSV存储引擎的表,会在操作系统上存储.frm表结构定义信息,还有.CSV文件存储数据就是和普通的CSV没什么区别。我们可以手动的更改此文件。从而实现增删改。

实践

需要注意分隔符是英文逗号(,),先创建相关的表以及数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
CREATE  TABLE  `lvs` (   `id`  int (11)  NOT  NULL ,  
  ` name char (20)  NOT  NULL
    `address`  char (30)  NOT  NULL ,   
    `mail`  char (30)  NOT  NULL  ) ENGINE=CSV  DEFAULT  CHARSET=utf8;
    
   #数据文件
1, "百度" , "人工智能" , "18655@163.com"
2, "百度" , "测试" , "18655@163.com"
3, "腾讯" , "北京" , "18655@163.com"
4, "阿里巴巴" , "计算器" , "18655@163.com"
   
  #检查改表相关的物理文件
-rw-rw ---- 1 mysql mysql   35 May 17 16:28 lvs.CSM # 报错表的状态和表中的数据
-rw-rw ---- 1 mysql mysql    0 May 17 16:28 lvs.CSV #数据文件
-rw-rw ---- 1 mysql mysql 8652 May 17 16:28 lvs.frm #表结构
 
[root@iZ23t094y03Z test]# cat   lvs.csv #检查准备的数据文件
1, "百度" , "人工智能" , "18655@163.com"
2, "百度" , "测试" , "18655@163.com"
3, "腾讯" , "北京" , "18655@163.com"
4, "阿里巴巴" , "计算器" , "18655@163.com"
1, "百度" , "人工智能" , "18655@163.com"
2, "百度" , "测试" , "18655@163.com"
3, "腾讯" , "北京" , "18655@163.com"
4, "阿里巴巴" , "计算器" , "18655@163.com"
#将准备好的数据文件写入lvs.CSV文件
root@iZ23t094y03Z test]# cat   lvs.csv   >lvs.CSV 
#检查数据库
MariaDB [test]>  select  *   from  lvs;
+ ----+--------------+--------------+---------------+
| id |  name          | address      | mail          |
+ ----+--------------+--------------+---------------+
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
+ ----+--------------+--------------+---------------+
再插入
   cat   lvs.csv   >>lvs.CSV  #这时更改数据、增加数据  可能不会立即生效 可以用以下命令
   检查和修复。
 
  MariaDB [test]>  check   table  lvs;
+ ----------+-------+----------+----------+
Table     | Op    | Msg_type | Msg_text |
+ ----------+-------+----------+----------+
| test.lvs |  check  | error    | Corrupt  |
+ ----------+-------+----------+----------+
1 row  in  set  (0.00 sec)
 
MariaDB [test]> repair   table    lvs;
+ ----------+--------+----------+----------+
Table     | Op     | Msg_type | Msg_text |
+ ----------+--------+----------+----------+
| test.lvs | repair | status   | OK       |
+ ----------+--------+----------+----------+
1 row  in  set  (0.00 sec)
 
MariaDB [test]>  select  *   from  lvs;
+ ----+--------------+--------------+---------------+
| id |  name          | address      | mail          |
+ ----+--------------+--------------+---------------+
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
+ ----+--------------+--------------+---------------+
16  rows  in  set  (0.00 sec)

 数据导入的时候需要注意字符集、分割付,中英文标点符号等,不然不能加载数据,check table lvs失败repair  table lvs 修复时, 甚至可能清空整张表的数据。

方法5、复制相同表的数据

  在mysql中我们可以将一张表复制到另一个库中,也可以复制相同的表结构和数据。

1、剪切某表到新的库

目前的test库中有lsv和lvs两张表,还有一个新的库csvtest,目前没有表,我们实现表的移动操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
MariaDB [test]> show  tables;
+ ----------------+
| Tables_in_test |
+ ----------------+
| lsv            |
| lvs            |
 
MariaDB [test]>  alter   table    lvs rename  csvtest.lvs;
Query OK, 0  rows  affected (0.00 sec)
 
MariaDB [test]> show tables;  #执行完
+ ----------------+
| Tables_in_test |
+ ----------------+
| lsv            |
+ ----------------+
检查csvtest库
 
 
MariaDB [test]> use  csvtest
Reading  table  information  for  completion  of  table  and  column  names
You can turn  off  this feature  to  get a quicker startup  with  -A
 
Database  changed
MariaDB [csvtest]> show tables;
+ -------------------+
| Tables_in_csvtest |
+ -------------------+
| lvs               |
+ -------------------+
1 row  in  set  (0.00 sec)
 
MariaDB [csvtest]>  select   *   from  lvs;
+ ----+--------------+--------------+---------------+
| id |  name          | address      | mail          |
+ ----+--------------+--------------+---------------+
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
|  1 | 百度         | 人工智能     | 18655@163.com |
|  2 | 百度         | 测试         | 18655@163.com |
|  3 | 腾讯         | 北京         | 18655@163.com |
|  4 | 阿里巴巴     | 计算器       | 18655@163.com |
+ ----+--------------+--------------+---------------+
16  rows  in  set  (0.00 sec)
真的全部移动到此啊,我们在检查一下物理文件有什么变化呢
 
[root@iZ23t094y03Z csvtest]# pwd
/var/lib/mysql/csvtest
[root@iZ23t094y03Z csvtest]# ls 
db.opt  lvs.CSM  lvs.CSV  lvs.frm
#再看看原来的目录
[root@iZ23t094y03Z csvtest]# cd  ../test/
[root@iZ23t094y03Z test]# ll
total 24
-rw-rw ---- 1 mysql mysql   35 May 17 15:13 lsv.CSM
-rw-rw ---- 1 mysql mysql  159 May 17 15:13 lsv.CSV
-rw-rw ---- 1 mysql mysql 8652 May 17 15:03 lsv.frm

 这个SQL真的很强大,在物理上和逻辑上都进行了移动。真心的强大啊。

方法2  创建表(复制表)迁移数据

 除了上面的方法,我们还可以使用创建表的方式复制表结构和表中的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
MariaDB [csvtest]> create  table  lvs2   engine = innodb  as select  *  from   csvtest.lvs;
Query OK,  16  rows affected ( 0.04  sec)
Records:  16   Duplicates:  0   Warnings:  0
 
MariaDB [csvtest]> show  tables;
+ - - - - - - - - - - - - - - - - - - - +
| Tables_in_csvtest |
+ - - - - - - - - - - - - - - - - - - - +
| lvs               |
| lvs2              |
+ - - - - - - - - - - - - - - - - - - - +
2  rows  in  set  ( 0.00  sec)
 
MariaDB [csvtest]> ;
ERROR: No query specified
 
MariaDB [csvtest]> select   *  from   lvs2;
+ - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - +
id  | name         | address      | mail          |
+ - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - +
|   1  | 百度         | 人工智能     |  18655 @ 163.com  |
|   2  | 百度         | 测试         |  18655 @ 163.com  |
|   3  | 腾讯         | 北京         |  18655 @ 163.com  |
|   4  | 阿里巴巴     | 计算器       |  18655 @ 163.com  |
|   1  | 百度         | 人工智能     |  18655 @ 163.com  |
|   2  | 百度         | 测试         |  18655 @ 163.com  |
|   3  | 腾讯         | 北京         |  18655 @ 163.com  |
|   4  | 阿里巴巴     | 计算器       |  18655 @ 163.com  |
|   1  | 百度         | 人工智能     |  18655 @ 163.com  |
|   2  | 百度         | 测试         |  18655 @ 163.com  |
|   3  | 腾讯         | 北京         |  18655 @ 163.com  |
|   4  | 阿里巴巴     | 计算器       |  18655 @ 163.com  |
|   1  | 百度         | 人工智能     |  18655 @ 163.com  |
|   2  | 百度         | 测试         |  18655 @ 163.com  |
|   3  | 腾讯         | 北京         |  18655 @ 163.com  |
|   4  | 阿里巴巴     | 计算器       |  18655 @ 163.com  |
+ - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - +
16  rows  in  set  ( 0.00  sec)

mysqlimport 导入导出数据

   导入导出数据的方式特别多,除了我们上述的几种外,还有一个mysqlimport可以将文件导入到数据库中。可以从各种格式的文本文件中加载表。 文本文件名称必须是应该使用的表的名称。如果使用套接字连接到MySQL服务器,则服务器将直接打开并读取文本文件。 在其他情况下,客户端将打开文本文件。 SQL命令“LOAD DATA INFILE”用于导入行。

mysqlimport   -u  root  -p123123  Docker --default-character-set=utf8   --fields-terminated-by=, user.awk  #指定分割符

mysqlimport常用参数

--default-character-set=utf8
-d  --delete 导入数据前 会先删除 会删除表中的所有数据 
-f --force  如果遇见错误 仍然要继续执行
-i  --ignore  如果插入记录中发现有重复值 那么这条记录不做处理
-r  --replace  如果插入记录中发现有重复值 则覆盖旧记录
-L  --local   从执行命令客户端读取文件 默认从服务端对应的路径下读取文件
-s --silent  导入数据 不输出操作结果
--ignore-lines=  跳过文件的前多少行
--user-threads=  并行加载数据 多线程 加载数据
--fields-terminated-by=  指定分割符
--fiedes-enclosed-by=  指定用于包括住列值的符号 对于字符列 或者中间包括列分隔符情景比较适用 例如分隔符中为, 内容中有逗号。

其实mysqlimport和load data 原理是一样的,所以支持的参数什么都是一样的,主要的区别就是mysqlimport是一种接口的形式



随着使用MYSQL越来越多,也慢慢的发现了其中很多让人惊讶的地方,功能真的非常的强悍。继续努力吧!




本文转自 tianya1993 51CTO博客,原文链接:http://blog.51cto.com/dreamlinux/1899822,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
265
分享
相关文章
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
895 0
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为'0'或'1',查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
本文探讨了在使用YMP 23.2.1.3迁移MySQL Server字符集为latin1的中文数据至YashanDB时出现乱码的问题。问题根源在于MySQL latin1字符集存放的是实际utf8编码的数据,而YMP尚未支持此类场景。文章提供了两种解决方法:一是通过DBeaver直接迁移表数据;二是将MySQL表数据转换为Insert语句后手动插入YashanDB。同时指出,这两种方法适合单张表迁移,多表迁移可能存在兼容性问题,建议对问题表单独处理。
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
331 43
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
57 9
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
144 9
MySQL进阶突击系列(09)数据磁盘存储模型 | 一行数据怎么存?
文中详细介绍了MySQL数据库中一行数据在磁盘上的存储机制,包括表空间、段、区、页和行的具体结构,以及如何设计和优化行数据存储以提高性能。
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等