ReplaceINTO与INSERTINTO的不同之处

ReplaceINTO与INSERTINTO的不同之处,第1张

ReplaceINTO与INSERTINTO的不同之处,第2张

替换到和插入到之间的区别:

替换的工作方式很像插入。有一个例外,如果表中的旧记录与主键或唯一索引的新记录具有相同的值,则在插入新记录之前,旧记录将被删除。

请注意,除非表有主键或唯一索引,否则使用REPLACE语句是没有意义的。该语句与INSERT相同,因为没有使用索引来确定新行是否复制了其他行。

所有列的值都取自REPLACE语句中指定的值。所有缺少的列都被设置为默认值,这与INSERT相同。不能引用当前行中的值或使用新行中的值。如果使用诸如“SET col_name = col_name+1”这样的赋值,对右边列名的引用将被视为DEFAULT(col_name)。因此,这种赋值相当于set col _ name = default(col _ name)+1。

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

REPLACE语句返回一个数字来指示受影响的行数。这个数字是删除行和插入行的总和。如果单行替换的数字为1,则插入一行,不删除任何行。如果该数字大于1,则在插入新行之前会删除一个或多个旧行。如果表包含多个索引,并且新行复制不同索引中不同旧行的值,则有可能一行替换多个旧行。

受影响的行数可以很容易地确定replace是否只添加一行,或者REPLACE是否还替换其他行:检查数字是否为1 (add)或更大(REPLACE)。

如果使用C API,可以使用mysql_affected_rows()函数获得受影响的行数。

目前,您不能在子查询中更改到一个表并从同一个表中进行选择。

以下算法的详细描述(该算法也用于加载数据…替换):

1.尝试在表格中插入新行

2.当由于主键或关键字的重复关键字错误而导致插入失败时:

A.从表中删除具有重复键值的冲突行。

B.再次尝试在表格中插入新行

使用格式如下:

替换[低优先级|延迟]

[入] tbl_name [(col_name,...)]

值({expr | DEFAULT}、…)、(…)、…

或者:

替换[低优先级|延迟]

[INTO] tbl_name

SET col_name={expr | DEFAULT},…

或者:

替换[低优先级|延迟]

[入] tbl_name [(col_name,...)]

选择…

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » ReplaceINTO与INSERTINTO的不同之处

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情