• 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

  • 相关阅读:
    程序人生2008年(49)
    多种方式实现字符串/无符号数反向输出_栈_递归_头尾指针
    Ebusiness suite system service management ( EBS服务管理)
    文件系统FatFsR0.09a翻译(三):ff.h
    cocurrent request,program,process 并发请求,程序,进程的概念
    Laravel 5.* 执行seeder命令出现错误的解决方法
    Laravel修改配置后一定要清理缓存 "php artisan config:clear"!
    laravel构造函数和中间件执行顺序问题
    Laravel5.3使用学习笔记中间件
    laravel 是怎么做到运行 composer dumpautoload 不清空 classmap 映射关系的呢?
  • 原文地址:https://www.cnblogs.com/burness/p/3805113.html
Copyright © 2020-2023  润新知