一般对于数据库表的插入操作,我们都会写程序执行插入sql,插入的数据少还可以,如果数据多了。执行效率上可能就不太理想了。load data语句用于高速地从一个文本文件中读取数据,装载到一个表中,相比于前者效率会高很多。
 
 
语法
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' 
[REPLACE | IGNORE] 
INTO TABLE tbl_name 
[PARTITION (partition_name [, partition_name] ...)] 
[CHARACTER SET charset_name] 
[{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ]
[LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var [, col_name_or_user_var] ...)]
[SET col_name={expr | DEFAULT}, [, col_name={expr | DEFAULT}] ...]

解析
[LOW_PRIORITY | CONCURRENT] [LOCAL]
  • 如果指定LOW_PRIORITY, 则load data语句的执行被延迟,直到没有其他客户端从表中读取数据
  • 如果指定CONCURRENT,如果一个myisam表满足同时插入的条件(该表在中间有空闲块),则当load data正在执行时,其他线程会从表中重新获取数据,即使没有其他线程在同时使用本表,这个选项也会略微影响loda data的性能
  • 如果指定LOCAL, 则被认为与连接的客户端有关,文件从客户端读取,并发送到服务器
注意:如果文件在数据库所在的服务器上时,文件必须位于数据库目录中,或者是全体可读(拥有file权限
 
[REPLACE | IGNORE] 
对于有惟一键(或主键)的表操作时,REPLACE和IGNORE关键字用于控制这些输入记录的操作
  • 如果指定了REPLACE,在遇到主键或唯一键时,输入行会替换掉原有行
  • 如果指定了IGNORE,在遇到主键或唯一键时,则输入行会被跳过
注意:如果没有指定这两个选项,两个处理方案。如果指定了local,则发生冲突时运行处理和ignore相同;如果没有指定local,则发生冲突时会有错误,并且之后的文本会被忽略
 
[PARTITION (partition_name [, partition_name] ...)] 
不详,遇到再补充
 
[CHARACTER SET charset_name] 
指定连接编码,解析编码,对于中文处理 CHARACTER SET utf8
 
[{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ]
如果指定了FIELDS,则(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)至少指定其中一项,可设置多项
  • TERMINATED BY xxx 指定了属性之间的分隔符
  • OPTIONALLY不详,用到再补充
  • ENCLOSED BY xxx指定了属性值的开闭标签
  • ESCAPED BY xxx 指定了转义字符前缀
注意:如果不指定FIELDS,则默认为FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'。通俗解释属性没有开闭标签,属性值之间的分隔符用制表符,转义字符前缀用反斜线
 
[LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]
如果指定了LINES,则(STARTING BY,TERMINATED BY)至少指定其中一项,可设置多项
  • STARTING BY xxx 如果希望读入的行都有个共有前缀,从前缀后开始读取,可以设置,如果某行中不包含共有前缀,则该行被跳过
  • TERMINATED BY xxx 行结束符
注意:如果没有指定LINES,则默认为LINES TERMINATED BY '\n' STARTING BY ''。通俗解释以换行符作为行结束符,没有共有前缀
LINES和FIELDS如果都有指定,FIELDS需要放到LINES之前
 
[IGNORE number {LINES | ROWS}]
用于在问价你的开始处忽略行,比如使用IGNORE 1 LINES跳过一个包含列名称的起始标题行
 
[(col_name_or_user_var [, col_name_or_user_var] ...)]
指定需要插入的属性列表,比如(name,age)
 
[SET col_name={expr | DEFAULT}, [, col_name={expr | DEFAULT}] ...]
SET可以被用于提供来源输入文件以外的值设定
load数据的时候,用当前时间指定某属性的值
    load data infile xxx
    into table xxx
    (column1, column2)
    set column3 = CURRENT_TIMESTAMP;
对输入文件里的内容赋值给用户变量,然后进行相关操作后再赋值给某个属性
    load data infile xxx
    into table xxx
    (column1, column2, @var, column4)
    set column3 = @var/100;
 
 
实例
创建测试表
CREATE TABLE `test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(255) NOT NULL DEFAULT '',
  `AGE` int(11) NOT NULL DEFAULT '0',
  `ADDTIME` datetime NOT NULL,
  `TIMESTAMP` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
建立数据文件
'hehe'    '12'
'pe    ter'    '12'
'sta\'rof'    '12'
'ali贵阳ce'    '12'
'te\\st'    '12'
'y\\a\\n'    '12'
'lv\\t中国p'    '12'
'p\'vl'    '12'
'ya\\贵州n'    '14'
'ya\\n贵州n'    '14'
'ya\\\\贵州n'    '14'
'ya\\\\贵州n'    '14'
'l\\    vp'    '13'
'p\\tvl'    '18'
控制台连接mysql执行load data
load data infile 'd:/data.txt' into table test character set utf8 fields terminated by '\t' enclosed by "'" escaped by '\\' lines terminated by '\n' (NAME, AGE) set ADDTIME =CURRENT_TIMESTAMP;

执行结果 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

load data(sql)的更多相关文章

  1. load data 方式导入的数据不可以用binlog日志进行恢复,因为binlog里面不产生insert sql语句。

    QQ群里面有人问起这个问题:    用load data 导入数据的时候,在binlog文件中记录的不是insert 语句,这样的话,如果用load data 导入数据,当需要恢复数据库的时候  bi ...

  2. SQL基本语句(3) LOAD DATA INFILE

    使用LOAD语句批量录入数据 语法: LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNOR ...

  3. Mybatis拦截器 mysql load data local 内存流处理

    Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所lo ...

  4. 快速的mysql导入导出数据(load data和outfile)

    1.load data: ***实际应用:把日志生成的xls文件load到MySQL中: mysql_cmd = "iconv -c -f utf-8 -t gbk ./data/al_ve ...

  5. 批量导数据之利器-load data[2016-07-11]

    由于天热,中午吃完饭后不再去逛了,感觉这段时间其实也是可以利用起来的,所以决定每天中午积累一些小的知识点.今天中午,先总结一下最近造数据用到手命令,load data. 使用这个命令的起源是因为最近要 ...

  6. mysql导入数据load data infile用法

    mysql导入数据load data infile用法 基本语法: load data [low_priority] [local] infile 'file_name txt' [replace | ...

  7. 合理使用mysql中的load data infile导入数据

    基本语法: load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]into table tbl_name ...

  8. LOAD DATA INFILE Syntax--官方

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_n ...

  9. mysql 的load data infile要使用

    LOAD DATA INFILE从文本文件中读出的声明以极高的速度到表. 1.基本语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fi ...

随机推荐

  1. FreeMarker简介

    什么是 FreeMarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用 ...

  2. Bash脚本编写初体验

    上周例会的时候,冷不丁的接到了维护原有的安装脚本和编写升级.卸载脚本的任务,PM和几个同事一本正经的说,一天甚至30分钟就可以精通shell脚本编写,哪怕没有语言基础也可以. 当然,作为有着C++.P ...

  3. [C#] 如何截取完整的网页图片

    前言 有时候浏览到非常有用的网页时,我们会选择将它加入到收藏夹中,但是网站一旦过期,以后就看不到这个网页了.当然也可以将网页打印成PDF文档保存.最新的Windows 10中的Edge浏览器支持将网页 ...

  4. 向GitHub 提交你的源代码

    之前的这篇文章「Git入门篇」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作,教你们向 GitHub 上提交你们 ...

  5. 分布式定时任务 -- elastic-job

    一.前言 在我们的项目当中,使用定时任务是避免不了的,我们在部署定时任务时,通常只部署一台机器.部署多台机器时,同一个任务会执行多次.比如短信提醒,每天定时的给用户下发短信,如果部署了多台,同一个用户 ...

  6. Spring Cloud在国内中小型公司能用起来吗?

    今天吃完饭休息的时候瞎逛知乎,突然看到这个一个问题Spring Cloud在国内中小型公司能用起来吗?,吸引了我的注意.仔细的看了题主的问题,发现这是一个好问题,题主经过了一番思考,并且用图形全面的将 ...

  7. 图片懒加载Demo

    相关知识: [js获取元素位置+元素大小]全面总结

  8. 201521123108 《Java程序设计》第6周学习总结

    本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 书面作业 2.1. clone方法 1.1 Object对象中的 ...

  9. 201521123105 《Java程序设计》第1周学习总结

    1.学习总结      简单学习jave 了解并区分JVM JRE JDK 了解JAVA语言的发展史 2.书面作业        Q:为什么java程序可以跨平台运行?执行java程序的步骤是什么?( ...

  10. 201521123078 《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) 2 ...