说明技巧(说明されれば)

lxf2023-08-08 11:30:01

REPLACE运行起来很像INSERT。除了一点,如果表中的旧记录与新记录的主键或唯一索引具有相同的值,则在插入新记录之前,旧记录将被删除。参见第13.2.4节“插入语法”。

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

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

MySQL替换成权限

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

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

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

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

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

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

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

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

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

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

MySQL Replace INTO format Replace[low _ priority | delayed][INTO]TBL名[(列名...)]值({expr | default},...), (...), ...

或者:

替换[低优先级|延迟][入]TBL _名称集col_name={expr | DEFAULT},…

或者:

替换[低优先级|延迟][进入] tbl_name [(列名,...)]选择…

adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!