数据库原理与应用 第 10 章 · 第四节
课程 › 第 10 章 › 第四节 INTO OUTFILELOAD DATA 版式
第 10 章 数据库备份还原和日志管理 · 第四节

导出和导入文件

用 SELECT … INTO OUTFILE 导出文本文件,用 LOAD DATA INFILE 导入文本文件
本 节 知 识 点
  1. 15用 SELECT … INTO OUTFILE 导出
  2. 16用 LOAD DATA INFILE 导入
15
第 10 章 · 第四节 · 课件第 26、27、28、29 页合并重做

用 SELECT … INTO OUTFILE 导出

把查询结果写成服务器上的一个文本文件。

10.5 数据库导入和导出课件第 26、27、28、29 页合并

用 SELECT … INTO OUTFILE 导出(例 10-13、例 10-14)

SELECT … INTO OUTFILE '文件名' [FIELDS 选项] [LINES 选项]
SELECT * FROM teaching.s INTO OUTFILE
'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/s.txt'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';
选项作用
FIELDS TERMINATED BY ','字段之间的分隔符,默认是制表符
OPTIONALLY ENCLOSED BY '"'字符串两边加双引号,数字不加
LINES TERMINATED BY '\n'每行的结束符,默认是 \n
  • 只能写到 secure_file_priv 指定的文件夹中,否则报错 1290。执行 SHOW VARIABLES LIKE 'secure_file_priv' 可以查出这个文件夹,路径中的 \ 写成 /
  • 文件已经存在时报错 1086,不会覆盖。文件中只有数据,没有列名和建表语句
  • 例 10-14 把扩展名改成 .xls、.xml,内容仍是同样的文本,中文用 Excel 打开可能是乱码

试一试导出到哪里才能成功

执行

实 验

实验 2-1 查看允许导出的文件夹

实 验

实验 2-2 导出学生表

实 验

实验 2-3 指定分隔符导出

16
第 10 章 · 第四节 · 课件第 30、31、32 页合并重做

用 LOAD DATA INFILE 导入

把文本文件中的行读入表中,是导出的反向操作。

10.5 数据库导入和导出课件第 30、31、32 页合并

用 LOAD DATA INFILE 导入(例 10-15)

LOAD DATA INFILE '文件名' [REPLACE | IGNORE] INTO TABLE 表名 [FIELDS 选项] [LINES 选项]
LOAD DATA INFILE
'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/s.txt'
INTO TABLE teaching.s_copy
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';
  • 表必须已经存在,列的顺序与文件中字段的顺序一致
  • FIELDS 和 LINES 的写法要与导出时相同
  • REPLACE:主键重复时用新行替换旧行
  • IGNORE:跳过主键重复的行
  • 两个都不写:遇到重复的主键报错 1062
两套导出导入的办法
mysqldumpINTO OUTFILE
文件内容建表和插入语句只有数据
导入mysql 命令LOAD DATA
用途备份、迁移整个库与 Excel 等交换数据
导出时没写 LINES,导入时也不要写。行结束符与文件不一致时,行就拆不开。

练一练

文件导出时用 FIELDS TERMINATED BY ',',导入时没有写 FIELDS 子句,会怎样?
  1. A正常导入
  2. B按制表符拆分,出错
答案 B

默认按制表符拆分字段,一整行都放进第一个字段 sno,超出 CHAR(4) 的长度,报错 1406。

知道更多其他选项

LOW_PRIORITY、CONCURRENT 与表级锁有关,LOCAL 读客户端的文件,要另外开启,本课程不用。

实 验

实验 2-4 导入到新表

实 验

实验 2-5 重复导入与行结束符

保山学院·人工智能教研室·曹鼎鼎