当前位置: 首页 > 面试题库 >

插入…在何处使用双键更新?

狄侯林
2023-03-14
问题内容

我正在做,INSERT ... ON DUPLICATE KEY UPDATE但是我需要更新部分是有条件的,只有在某些额外条件发生变化时才进行更新。

但是,这WHERE是不允许的UPDATE。有什么解决方法吗?

我无法进行INSERT / UPDATE / SELECT的组合,因为这需要对复制进行处理。


问题答案:

我建议您使用IF()来做到这一点。

参考:条件重复键更新与MySQL

INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
  VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
  last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);


 类似资料:
  • 问题内容: 我正在执行插入查询,其中如果已经存在唯一键,则许多列中的大多数都需要更新为新值。它是这样的: 我不确定该子句的语法应该是什么。如何从子句引用当前行? 问题答案: MySQL将假定等号之前的部分引用INSERT INTO子句中命名的列,而第二部分引用SELECT列。

  • 问题内容: MySQL有这样的东西: 据我所知,SQLite中不存在此功能,我想知道的是,是否有任何方法可以实现相同的效果而不必执行两个查询。另外,如果这不可能,那么您更喜欢什么: SELECT +(插入或更新) 或 UPDATE( 如果UPDATE失败,则 + INSERT ) 问题答案: 因为3.24.0 SQLite还支持upsert ,所以现在您可以简单地编写以下内容

  • 问题内容: 我们有一个数据库,每天cronjob在午夜更新,我们从外部XML获取新数据。 我们要做的是插入所有新内容,并在键重复的情况下更新该字段。 我们想知道的是实际插入了哪些行,这意味着我们想要一个新项目的列表。是否有可能返回新插入的查询?基本上,我们将需要获取所有新的ID,而不是新插入的数量。 谢谢 问题答案: 添加一列并更改您的查询: 您也可以在触发器中增加它,使您可以保持查询不变。

  • 问题内容: 我有一张桌子,就是PK。当我插入行时,将有重复的键,并且我需要总结三个统计信息。我在Java中对PreparedStatement使用以下查询: 是否有更简洁的查询来实现?因为我简化了查询,所以那里有十多个统计信息。 问题答案:

  • 问题内容: 我有一个dao,它基本上使用hibernate将记录插入到一​​个表中,该dao用标记为注释,并且我有一个服务,该服务会生成其他一些东西,然后调用我的dao。我的服务也标注了使用。 我叫服务循环。我在dao上的插入内容是否可以批量或一个接一个地工作?我如何确定它们可以批量工作?hibernateTransaction Manager是否管理批处理插入? 我正在使用Oracle DB。