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一样。

不能引用当前行的值,然后用于更新新行。(因为当当前行


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部