请注意,除非表有主键或唯一索引,否则使用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中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!