mysql的replace语句_MySQL中的replace语句
一、背景
当使用replace语句更新access_apps表时,原有的mark列、remark列的信息丢失。
access_apps表中有mark、remark列,replace语句中没有mark、remark列。
错误原因:
错误认为replace语句相当于当主键冲突时,已修改的列将使用新值,未修改的列将使用旧值
replace语句对于缺失的列将使用默认值,而不是当前行中的值,导致原有的列信息丢失。
二、replace语句详解
MySQL中replace语句具体算法如下:
1. 尝试把新行插入到表中
2. 当因为主键(PRIMARY KEY)冲突错误或(UNIQUE INDEX)唯一索引重复错误而造成插入失败时:
a. 从表中删除含有重复关键字值的冲突行
b. 再次尝试把新行插入到表中
可以看出replace语句相当于insert操作或者delete+insert操作,因此,为了能够使用replace语句,必须同时具备insert和delete的权限。
replace语句执行时,分以下两种情况:
情况1:insert
当不存在主键冲突或唯一索引冲突,相当于insert操作
情况2:delete and insert
当存在主键冲突或唯一索引冲突,相当于delete操作,加insert操作
所有列的值均取自在replace语句中被指定的值,所有缺失的列的值被设置为列的默认值,这和INSERT一样。
不能引用当前行的值,然后用于更新新行。(因为当当前行
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
