MySQL replace into 说明(insert into 增强版)
MySQL replace into 说明(insert into 增强版)
在插入数据到一个表时,通常是这种情况:1. 先推断数据是否存在; 2. 假设不存在,则插入;3.假设存在,则更新。
在 SQL Server 中能够这样处理:
if not exists (select 1 from t where id = 1)
insert into t(id, update_time) values(1, getdate())
else
update t set update_time = getdate() where id = 1
那么 MySQL 中怎样实现这种逻辑呢?别着急!
MySQL 中有更简单的方法:
replace into
replace into t(id, update_time) values(1, now());
或
replace into t(id, update_time) select 1, now();
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中。 1. 假设发现表中已经有此行数据(依据主键或者唯一索引推断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引。否则的话,replace into 会直接插入数据,这将导致表中出现反复的数据。
MySQL replace into 有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...
前两种形式用的多些。当中 “into” keyword能够省略,只是最好加上 “into”。这样意思更加直观。
另外。对于那些没有给予值的列。MySQL 将自己主动为这些列赋上默认值。
replace具体说明:
參考资料:http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE作品全然一样 的INSERT,但假设旧表中的行具有同样的值作为一个新行 PRIMARY或
KEYUNIQUE 索引。旧行插入新行之前删除。请參见 第13.2.5节,“INSERT语法”。
REPLACE是一个MySQL扩展SQL标准。它要么插入或删除 和插入。还有一个MySQL扩展到标准的SQL。要么插入或 更新 -请參阅 第13.2.5.3,“INSERT
... ON DUPLICATE KEY UPDATE的SQL语法”。
请注意。除非表有一个PRIMARY或
KEYUNIQUE索引。使用 REPLACE语句是没有意义的。
它变成相当于INSERT,由于要使用没有索引,以确定新的行是否会复制另外一个。
值的全部列都来自于指定的值 REPLACE语句。
不论什么缺失的列被设置为各自的默认值,就像发生在 INSERT。您不能从当前行參考值,并使用他们的新行。
假设您使用的作业,如设置 ,參考列名在右边被视为 COL_NAME = COL_NAME +1默认(,所以转让相当于COL_NAME)SET 。COL_NAME =
DEFAULT(COL_NAME)+1
要使用REPLACE,您必须同一时候拥有INSERT和 DELETE的表的权限。
在REPLACE语句返回一个数来表示受影响的行数。
这是删除和插入的行的总和。
假设计数1为单排 更换,连续被插入并没有行被删除。
假设计数插入新行之前大于1。一个或多个旧行被删除。
这是可能的单行替换多个旧行假设表包括多个唯一索引,而且新行复制的值在不同的唯一索引中的不同旧行。
受影响的行数能够非常easy地确定是否 REPLACE仅仅加入了一行。或者是否也换成不论什么行:检查是否计数1(加入)或更大(替换)。
假设您正在使用C
API时,受影响的行数能够通过获得 mysql_affected_rows()函数。
眼下,您不能更换成一个表,并从同一个表中的子查询中选择。
MySQL使用下列算法 REPLACE(和LOAD):
DATA ... REPLACE
尝试插入新行插入表
而插入失败。由于发生在主键或唯一索引的反复键错误:
从表中删除了反复的键值冲突的行
再次尝试插入新行插入表
可能的是在一个反复键错误的情况下,存储引擎能够运行REPLACE作为更新,而不是删除加插入,但语义是同样的。有没有比方何存储引擎添加一个可能的差异其它用户可见的效果 Handler_ 状态变量。XXX
版权声明:本文博客原创文章。博客,未经同意,不得转载。
MySQL replace into 说明(insert into 增强版)的更多相关文章
- MySQL replace into (insert into 的增强版)
在使用SQL语句进行数据表插入insert操作时,如果表中定义了主键,插入具有相同主键的记录会报错: Error Code: 1062. Duplicate entry 'XXXXX' for ke ...
- MySQL replace into 与insert into
https://blog.csdn.net/helloxiaozhe/article/details/77427266 使用replace带来的问题 1.Replace into 操作在唯一键重复情况 ...
- MySQL replace into 用法(insert into 的增强版)
转 http://blog.csdn.net/risingsun001/article/details/38977797 MySQL replace into 用法(insert into 的增强版) ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- mysql插入数据时 insert IGNORE、ON DUPLICATE KEY UPDATE、replace into
转: mysql insert时几个操作DELAYED .IGNORE.ON DUPLICATE KEY UPDATE的区别 博客分类: mysql基础应用 mysql insert时几个操作DE ...
- 【转】MySQL的Replace into 与Insert into on duplicate key update真正的不同之处
原文链接:http://www.jb51.net/article/47090.htm 今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on ...
- 将表里的数据批量生成INSERT语句的存储过程 继续增强版
文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧 ...
- mysql中 REPLACE INTO 和 INSERT INTO 的区别
mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...
- MySQL "replace into" 的坑以及insert相关操作
下面我们主要说一下在插入时候的几种情况: 1:insert ignore 2:replace into 3:ON DUPLICATE KEY UPDATE 关于insert ignore: 关于rep ...
随机推荐
- Canvas的方法覆盖和实现新的API
有时候为了特定需求或者特殊目的,需要覆盖或者重写某个API,在Canvas中,就需要用到CanvasRenderingContext2D这个对象. CanvasRenderingContext2D为C ...
- Android:抄QQ照片选择器(按相册类别显示,加入选择题)
这个例子的目的是为了实现类似至QQ照片选择功能.选择照片后,,使用类似新浪微博 微博 页面上显示. 先上效果图: 本例中使用的主要技术: 1.使用ContentProvider读取SD卡全部图 ...
- navicat如何导入sql文件
工具--数据的传输--文件 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- win8 iis7/iis8 安装、卸载、设置方法
原文:win8 iis7/iis8 安装.卸载.设置方法 一.安装 自从升级到Win8之后,之前使用已经趋于熟悉的iis7.0被取而代之的是iis8.0,那么安装和获取方法也就产生的略微的变化,为了避 ...
- Java设计模式(七)策略模式 模板模式
(十三)策略模式 策略图案限定了多个封装算法,该算法可以相互替换包.法的客户.借用还有一位大神的样例. interface ICalculator{ public int calculate(Stri ...
- Serverlet具体解释
Serverlet简单介绍: Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的server端程序.其主要功能在于交互式地浏览和改动数据,生成 ...
- python 时间处理
在实践中,时间处理遇到的问题,需要 Sep 06, 2014 19:30 (UTC 时间) 和 比较当前时间,早晚.知道 此 2014-09-06 19:30 格时间表达式.因此,在处理,通缉 先将s ...
- Java数据结构与算法(21) - ch09红黑树(RB树)
红-黑规则1. 每一个节点不是红色的就是黑色的2. 根总是黑色的3. 如果节点是红色的,则它的子节点必须是黑色的:如果节点是黑色的,其子节点不是必须为红色.4. 从根到叶节点或空子节点的每条路径,必须 ...
- JAVA转让JS功能
今天,在发展中使用js和Java互动.通常我们使用更多的是js转让Java方法.可以使用dwr.Ajax.jquery.突然发现Java转让js然后,我真的没见过,今天,互联网提供以下信息,顺便总结: ...
- 查询出各个学科的前3名的同学信息的Sql
查找各个学科的成绩前3名的学生信息Sql,有2种方法,一种是利用sql的row_number() over()函数,另一种是用子查询, 表设计如下 如果不考虑各个学科的成绩有并列的情况的话,有如下两种 ...