MySQL cookbook第10章读书笔记

1,使用load data和mysqlimport导入数据

image

1个ok,2个warning!!!

image

为什么会有warning,而且数据也没有load进去

2,指定数据文件位置

了解MySQL查找文件位置的规则。

如果load data语句没有local选项,MySQL读取数据文件将按下述规则在服务器所在机器上定位文件的位置:

  • 文件的绝对全路径名(从文件系统的根开始),MySQL直接读取该文件。
  • 给定的是文件的相对路径名,按照路径名的两种不同形式来解释和处理.

3,指定数据文件的结构

有一个数据文件但是不是load data默认格式,那么我们必须使用fields和lines子句告诉load data如何解释数据文件。另外local指定客户机位置的规则是当前目录。lines子句之下还包含一个starting by子句,用来指定每行中间剥除部分内容的序列。如果指定starting by ‘x’而输入行以abcX开头时,这四个字符都会被剥除。

image

4,处理引号和特殊字符

load data当心引号和转义字符。fields子句的三个子句(enclosed by, escaped by 和terminated by)

其中要完全禁止转义符处理,可指定空的转义序列:fields escaped by ‘ ’例如引用和转义符分别为“和,输入值为”a” “b”c”,被解释为a”b”c。

对于mysqlimport,用于指定引用和转移的命令选项为—fields-enclose-by –fields-escaped-by。

5,导入CSV文件

csv文件是以逗号而不是制表符分隔的值。

例如:包含以回车换行符对结尾的行的csv文件mytbl.txt可以使用以下语句载入到mytbl中:

image

对应的使用mysqlimport语句:

image

6,读取不同操作系统的文件

不同的操作系统中使用不同的行结束序列

Unix 通常使用换行符来结束行,在load data语句中使用:lines terminated by ‘ ’

Mac Os X使用回车字符,在load data语句中使用:lines terminated by ‘ ’

windows使用回车换行符对,在load data语句中使用:lines terminated by ‘ ’

7,处理重复的键值

当你的输入中包含一些记录,它们的键值与已有的表行键值一致,可以选择让load data忽略新的记录,或者取代旧的记录

例如当你确保你的数据库中的数据只存在最新的数据,如周期性地从不同的监测站接受关于当前天气情况的气象数据,并且将数据存入数据库中,从文件中load data时可以选择replace 或者ignore来告知mysql用新值来取代旧的行或者忽略忽略重复行。

load data local infile ‘data.txt’ replace into table weatherdata

对应的mysqlimport中有与load data的ignore和replace关键字选项。

8,获取关于错误输入数据的诊断信息

当操作load data之后,希望显示一些输入数据的诊断信息,当一个文件载入某个表,看到的信息:

image

image

可以使用show messages来查看相关的诊断信息。

9,跳过数据文件行

在load data 中加入一个子句 ignore n lines 表示忽略数据文件的起始n行,mysqlimport支持有同样效果的—ignore-lines=n选项

10,指定输入列顺序

数据文件中列和表的列顺序不同时,需要人为指定:

假定表中有列a,b,c,数据文件中数据对应于列b,c,a,那么此时载入文件:

load data local infile ‘mytbl.txt’into table mytbl (b,c,a)

对应的mysqlimport语句使用—columns选项指定列列表:

mysqlimport  -- local --columns=b,c,a cookbook mytbl.txt

11,在插入输入值之前对数据文件进行预处理

若数据文件内容和对应的表分别为:

image

image

使用以下命令进行预处理:

image

load之后数据表中的内容:

image

12,忽略数据文件列

假定从Unix密码文件/etc/passwd中载入信息,其中包含如下格式的行:

account:password:UID:GID:GECOS:directory:shell

创建其他列信息的表结构:

image

image

dummy为用户定义的变量,这里会忽视任意列,被称为假变量。

or使用mysqlimport中--columns:

image

13,从MySQL中导出查询结果

想将MySQL的查询结构导出到一个文件或者重定向另外的mysql程序的输出

1,select .. into outfile语句将查询结构导出到服务器上的文件中。

2,如果想在客户端主机上获取结果,导出查询的结果是重定向mysql程序的输出

image

使用mysql客户端来导出数据,select … into outfile将数据文件写入主机文件,你的mysql账户需要有file权限。

image

--skip-column-names告诉不要写入通常位于语句输出前部的列名行。

14,将表导出为文本文件

使用带--tab选项的mysqldump程序。mysqldump程序用于拷贝或者备份表和数据库。必须指定一个-- tab 用来指定写入文件的目录

image

因为mysqldump很多时候等同于select … into outfile 必须要有file权限

更改为root账户后ok

image

image

15,以SQL格式导出表内容和定义

SQL格式:image

导出数据库的多个表:image

所有数据库:image

image

一些选项用于控制输出格式:

image

同样你可以使用这些导出的文件来在其他的服务器上生成对应的数据库:

image

16,使用SQL模式来控制错误的输入数据处理

当插入与表格式不适合的数据时,会出现警告,但是数据还是部分会插入到表中,

image

为了杜绝这种问题,我们通常数设置sql mode

image

这个模式要求比较严格,还有其他的设置mode就不一一说明了,需要指出的是此次的sql_mode只是在当前的sql对话有效,要想在sql客户端都有效,需要使用关键字global:

image

原文地址:https://www.cnblogs.com/burness/p/3805113.html