MySQL--数据导出与导入

当我们需要将数据库数据导出存储到文本文档,或则从文本文档导入数据时,用下面语句比较方便:

select into outfile
load data infile

SELECT INTO OUTFILE语句把表数据导出到一个文本文件中,并用LOAD DATA INFILE语句恢复数据。但是这种方法只能导出或导入数据的内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构。配合子句实现更复杂的导入导出:

fields子句:

在FIELDS子句中有三个亚子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,则这三个亚子句中至少要指定一个。

  1. TERMINATED BY分隔符:用来指定字段值之间的符号,例如,“TERMINATED BY ','”指定了逗号作为两个字段值之间的标志。默认:tab字符(\t)
  2. ENCLOSED BY字段扩起字符:子句用来指定包裹文件中字符值的符号,例如,“ENCLOSED BY ' " '”表示文件中字符值放在双引号之间,若加上关键字OPTIONALLY表示所有的值都放在双引号之间。
  3. ESCAPED BY转义字符:子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。默认:\

lines子句:

在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为结束标志。默认:\n


1. select into outfile

select * from Table into outfile '/路径/文件名'
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'

执行条件:

   (1)路径目录必须有读写权限777
   (2)文件名必须唯一

示例:

select * from instance into outfile '/export/servers/wangaimin/instance03_26.txt';

错误:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

出错了,我们不知道 MySQL 默认的导出目录是哪里,甚至都不知道 MySQL 对于数据的导出目录都有所限制。

使用以下命令:

show variables like '%secure%';

  MySQL--数据导出与导入

如上图所示,我设置的secure-file-priv值为:/var/lib/mysql-files/

解决方式:

1. 将数据直接保存到目录:/var/lib/mysql-files/ 下

2. 我们可以通过打开linux: /etc/my.cnf   win: my.ini配置文件进行查看及修改:

MySQL--数据导出与导入

修改配置文件后,关闭MYSQL服务,重启。

然后实例:

select * from instance into outfile '/var/lib/mysql-files/instance03_26.txt';

  结果:MySQL--数据导出与导入

示例:

select * from instance into outfile '/var/lib/mysql-files/instance03_26_4.txt' fields terminated by ' , ' enclosed by '"' escaped by '*' lines terminated by '\n';

结果:

MySQL--数据导出与导入


2. load data infile

LOAD DATA INFILE语句是SELECT INTO OUTFILE语句的补语,该语句可以将一个文件中的数据导入到数据库中。

load data  [low_priority] [local] infile'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name,   )]

load data infile语句从一个文本文件中以很高的速度读入一个表中。使用这个命令之前,mysqld进程(服务)必须已经在运行。为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用load data infile,在服务器主机上你必须有file的权限。

  1. 如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。
  2. 如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。
  3.  replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。
  4.  load data infile 可以按指定的列把文件导入到数据库中。 当我们要把数据的一部分内容导入的时候,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。

示例:

load data infile '/var/lib/mysql-files/instance03_26_4.txt' ignore into table test_instance fields terminated by ' , ' enclosed by '"' escaped by '*' lines terminated by '\n';

结果:

MySQL--数据导出与导入

MySQL--数据导出与导入


End

相关文章:

  • 2021-12-23
  • 2021-04-02
  • 2022-01-21
  • 2021-08-16
  • 2021-10-08
猜你喜欢
  • 2021-12-13
  • 2021-08-02
  • 2021-07-31
  • 2021-09-28
  • 2021-11-23
相关资源
相似解决方案