INSERT 语法
- INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
- [INTO] tbl_name [(col_name,...)]
- VALUES ({expr | DEFAULT},...),(...),...
- [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:
- INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
- [INTO] tbl_name
- SET col_name={expr | DEFAULT}, ...
- [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:
- INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
- [INTO] tbl_name [(col_name,...)]
- SELECT ...
- [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
一、DELAYED 的应用
使悠揭捉?迟插入操作 DELAYED 调节符应用于 INSERT 和 WordStr 语句。当 DELAYED 插入操作达到的时刻,办事器把数据行放入一个队列中,并急速给客户端返回一个状况信息,如许客户端就可以在数据表被真正地插入记录之前持续进行操作了。如不雅攫取者大年夜该数据表中攫取数据,队列中的数据就会被保持着,直到没有攫取者为止。
接着办事器开端插入延迟数据行(delayed-row)队列中的数据行。在插入操作的同时,办事器还要检查是否有新的攫取请求达到和等待。如不雅有,延迟数据行队列就被挂起,许可攫取者持续操作。当没有攫取者的时刻,办事器再次开端插入延迟的数据行。这个过程一向进行,直到队列空了为止。
几点要留意事项
因为在行被插入前,语句急速返回,所以您不克不及应用 LAST_INSERT_ID() 来获取 AUTO_INCREMENT 值。AUTO_INCREMENT 值可能由语句生成。
DELAYED 在从属复制办事器中被忽视了,因为 DELAYED 不会在从属办事器中产生与主办事器不一样的数据。留意,今朝在队列中的各行只保存在存储器中,直到它们被插入到表中为止。这意味着,如不雅您强行中断了 mysqld(例如,应用 kill -9) 或者如不雅 mysqld 不测停止,则所有没有被写入磁盘的行都邑损掉。
IGNORE 是 MySQL 相对于标准 SQL 的扩大。如不雅在新表中有反复关键字,或者当 STRICT 模式启动后出现警告,则应用 IGNORE 控制 ALTER TABLE 的运行。
如不雅没有指定 IGNORE,当反复关键字缺点产生时,复制操作被放弃,返回前一步调。
如不雅指定了 IGNORE,则对于有反复关键字的行,只应用第一行,其它有冲突的行被删除。并且,对缺点值进行修改,使之尽量接近精确值。insert ignore into tb(…) value(…) 如许不消校验是否存在了,有则忽视,无则添加。
如不雅您指定了>
如不雅行作为新记录被插入,则受影响行的值为 1;如不雅原有的记录被更新,则受影响行的值为 2。
注释:如不雅列 b 也是独一列,则 INSERT 与此 UPDATE 语句相当:
- mysql> UPDATE table
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 听了这么多年平易近谣,我有一种感到,就是很多歌都似曾了解,然则细心一想,又哪一首都想不起来,为了搞>>>详细阅读
本文标题:MySQL该如何进行大数据量快速插入方法和语句优化?
地址:http://www.17bianji.com/lsqh/39158.html
1/2 1