插入...重复键更新在哪里?
我正在执行 INSERT ... ON DUPLICATE KEY UPDATE 但我需要更新部分是有条件的,只有在某些额外条件发生变化时才进行更新。
但是,此 UPDATE
上不允许使用 WHERE
。有什么解决方法吗?
我无法执行 INSERT/UPDATE/SELECT 的组合,因为这需要通过复制来完成。
I'm doing a INSERT ... ON DUPLICATE KEY UPDATE
but I need the update part to be conditional, only doing the update if some extra condition has changed.
However, WHERE
is not allowed on this UPDATE
. Is there any workaround for this?
I can't do combinations of INSERT/UPDATE/SELECT since this needs to work over a replication.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我建议你使用 IF() 来做到这一点。
请参阅:conditional-duplicate-key-updates-with-mysql
I suggest you to use IF() to do that.
Refer: conditional-duplicate-key-updates-with-mysql
这是我们的最终解决方案,效果非常好!
插入忽略将确保该行同时存在于主服务器和从服务器上,以防它们发生转移。
更新...其中确保只有最新的全局更新才是所有复制完成后的最终结果。
This is our final solution, works like a charm!
The insert ignore will make sure that the row exists on both the master and slave, in case they've ever diverted.
The update ... where makes sure that only the most recent update, globally, is the end result after all replication is done.
您可以使用两个插入语句..因为您可以向源数据的选择部分添加一个where子句。
选择两组数据,一组将插入“重复”,另一组将插入“重复”。
you could use two insert statements .. since you CAN add a where clause to the select part for the source data.
select two sets of data, one that you will insert with 'on duplicate' and the other will be inserted without 'on duplicate'.
概述
问题
ON DUPLICATE KEY UPDATE
解决方案
IF()
函数的条件子句项目
另请参阅
Overview
Problem
ON DUPLICATE KEY UPDATE
Solution
IF()
functionPitfalls
@doupdate
in order to flag whether or not the UPDATE row meets the condition. Then we use that same variable for all the database columns we use in the UPDATE statementSee also
On重复键
不允许我们使用where子句,因此有两种替代方法可以实现相同的目的。如果你知道大多数时候你会得到重复的密钥
<代码>a.首先使用 update 查询和 where 子句更新表
b.如果更新失败,则使用插入查询将记录插入表中
如果您大多数时候知道要插入表中,则
<代码>a.使用插入忽略查询将记录插入表中 - 它实际上是在发现重复键时忽略插入
b.如果插入忽略失败,则使用更新查询更新记录
参考
插入忽略
点击此处On duplicate key
do not allow us to use where clause, so there are two alternative to achieve the same.If you know most of the time you will get the duplicate key then
a. Update the table first using update query and where clause
b. If update fails then insert the record into table using insert query
If you know most of the time you are going to insert into table then
a. Insert the record into table using insert ignore query - what it does is actually ignore the insert if duplicate key found
b. If insert ignore fails then update the record using update query
For reference of
insert ignore
click here