sql replace into用法详细说明

sql replace into用法详细说明

REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY

KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该

语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

所有列的值均取自在REPLACE语句中被指定的值。所有缺失的列被设置为各自的默认值,这

和INSERT一样。您不能从当前行中引用值,也不能在新行中使用值。如果您使用一个例如“

SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT

(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

为了能够使用REPLACE,您必须同时拥有表的INSERT和DELETE权限。

REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和

。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1

,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制

了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。

受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行

:检查该数是否为1(添加)或更大(替换)。

1. 尝试把新行插入到表中

2. 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:

a. 从表中删除含有重复关键字值的冲突行

b. 再次尝试把新行插入到表中

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},…),(…),…
或:

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, …
或:

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT …

REPLACE INTO `table` (`unique_column`,`num`) VALUES ('$unique_value',$num);跟INSERT INTO `table` (`unique_column`,`num`) VALUES('$unique_value',$num) ON DUPLICATE UPDATE num=$num;还是有些区别的.
区别就是replace into的时候会删除老记录。如果表中有一个自增的主键。
那么就要出问题了。

首先,因为新纪录与老记录的主键值不同,所以其他表中所有与本表老数据主键id建立的关联全部会被破坏。

其次,就是,频繁的REPLACE INTO 会造成新纪录的主键的值迅速增大。
总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了。

时间: 2024-09-13 07:58:55

sql replace into用法详细说明的相关文章

sql replace into 用法与实现语句

以下是所用算法的更详细的说明(该算法也用于LOAD DATA...REPLACE): 1. 尝试把新行插入到表中 2. 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时: a. 从表中删除含有重复关键字值的冲突行 b. 再次尝试把新行插入到表中   使用格式:    代码如下 复制代码 REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...

sql substr()函数用法详细

语法  代码如下 复制代码 substr( string, start_position, [ length ] ) 字符串是源字符串. start_position是提取的位置.字符串中的第一个位置始终为1. length  可选的.它是提取的字符数.如果省略该参数,SUBSTR将返回整个字符串. Applies To:  代码如下 复制代码 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g 实例  代码如下 复制代码 substr('This is a

sql replace 用法与replace 优化方法

SELECT REPLACE('abcdefghicde','cde','xxx') GO UPDATE Stu set name = REPLACE(name,'abc','') REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法 REPLACE ( 'string_expression1′ , 'string_expression2′ , 'string_expression3′ ) 参数 'string_expression1′ 待搜索的字符串表

MySQL数据库replace into 用法(insert into 的增强版)

 Error Code: 1062. Duplicate entry 'XXXXX' for key 'PRIMARY'(主键冲突) 这样我们只好检查主键是不是存在,若存在则更新,若不存在则插入.或者写SQL流程控制语句(if...else...)   Mysql提供了replace into跟insert into的功能一样.不同点在于: 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据.否则,直接插入新数据. 注意:因为要根据主键或者是唯一索引判断是否

excel中函数lookup查询函数用法详细步骤实例

  excel中lookup查找函数用法详细步骤实例,函数的工作原理是在第二个参数(区域,一般是一列)中查找第一个参数(一般为单元格值),找到首个大于第一个参数时,函数返回找到的上方位置,对应的第三个参数的值. 如果第二个参数升序排列,可以直接说是返回小于等于第一个参数的最大值. 一般情况下都需要将第二个参数升序排列,函数才有现实意义. 方法/步骤 如图红框内部是不同的身高区间对应的尺码型号. 在红框所示的单元格内输入=lookup(),当光标在括号外部闪烁时,鼠标点一下括号内部,此时光标会在括

js中split和replace的用法实例

 这篇文章主要介绍了js中split和replace的用法,实例分析了split和replace的功能及使用技巧,需要的朋友可以参考下     本文实例讲述了js中split和replace的用法.分享给大家供大家参考.具体分析如下: 1. split : 代码如下: <html> <head> <title> 从业人员继续教育报名列表--打印签到表 sdfsd</tr><tr></tr> sdfsd </title> &

js正则表达式之replace函数用法_正则表达式

正则表达式replace()函数: 此函数用指定的字符串替换字符串中与正则表达式匹配的子字符串. 返回值是一个替换后的新字符串. 这里只介绍正则表达式的相关操作,其他替换操作可以参阅javascript的String对象的replace()方法一文. 语法结构: stringObject.replace(regexp,replacement) 参数列表如下: 参数名称 语义解释 regexp 必需.RegExp对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数

sql server-java链接SQL server数据库 操作详细步骤

问题描述 java链接SQL server数据库 操作详细步骤 java链接SQL server数据库 操作详细步骤, 以及方法 解决方案 http://blog.csdn.net/stewen_001/article/details/19553173/ 解决方案二: http://www.cnblogs.com/xiazhi33/articles/935771.html 解决方案三: 打开Eclipse,"文件"→"新建"→"项目"→"

js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解_javascript技巧

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索. substring() 方法用于提取字符串中介于两个指定下标之间的字符. substr(start,length)表示从start位置开始,截取length长度的字符串 split 将一个字符串分割为子字符串,然后将结果作为字符串数组返回 replace 用于在字符串中用一些字符替换另一些字符,或替换一个与正则