当前位置: 首页 > 知识库问答 >
问题:

如何更新MySQL/MariaDB中指定了最新值的日期类型列

卓麒
2023-03-14

我正在通过Spring Boot的JPA依赖关系处理我的MariaDB。

我有一个表,看起来像下面描述的表

因此,id、date和ip字段是此表的复合主键。

我试图使用以下查询更新匹配结果中最新的日期

sql prettyprint-override">UPDATE my_table SET date = NOW() WHERE
   id = 'finding_id' AND
   ip = 'finding_ip';

由于数据中存在重复的id-ip配对条目,如下所示,

我收到一条错误消息。

作为临时措施,我在where子句中附加了另一个限制,以将时间范围缩小为“在最后15分钟内”。

但是我正在为这个问题寻找更优雅的解决方法。

共有2个答案

白禄
2023-03-14

这里的问题是数据库模式。

您有一个主键,它是一个由3列组成的唯一复合键,并且希望能够在其中包含非唯一集。

除非您想每次都将Date更新为一个新的补丁(添加/包含毫秒),否则这是不可能的。

由于您似乎不关心这3列的唯一性,我建议您将索引类型从PRIMARY更改为index(仍然是composite),这样您就没有唯一性约束。

之后,添加一个新的“real”id列(或重命名另一列,使其成为id列),该列仅为启用自动递增的普通主键。

柳联
2023-03-14

在MySQL和MariaDB中,可以在update语句中使用ORDER BY和LIMIT:

UPDATE my_table 
SET `date` = NOW() 
WHERE
   id = 'finding_id' AND
   ip = 'finding_ip'
ORDER BY `date` DESC
LIMIT 1;

由于WHERE子句的存在,上述操作将使用当前日期时间更新过滤器中日期最长的记录。

注意:最好不要将任何保留字用作列名。可以,但必须在字段名周围使用反勾号。

 类似资料:
  • 本文向大家介绍如何在MySQL中更新日期格式?,包括了如何在MySQL中更新日期格式?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是转换日期格式的查询- 这将产生以下输出-

  • 本文向大家介绍如何在MySQL中创建和更新表的日期?,包括了如何在MySQL中创建和更新表的日期?的使用技巧和注意事项,需要的朋友参考一下 使用MySQL中的create_time或update_time获取创建和更新表的确切日期。 首先,使用SHOW命令。语法如下 我们正在考虑我们的数据库“ test3”,该数据库已经有一些表 现在使用以下查询显示数据库test3中的所有表 以下是输出 查询如下

  • 问题内容: 当我想在mysql表中设置数值+1时,我使用例如: 如何设置日期+一年? 谢谢 问题答案: 您可以使用DATE_ADD:(或将ADDDATE与一起使用)

  • 在Google的createEventSeries示例(如下所示)中,日期值在末尾用“est”指定。但是,我希望为重复发生的事件指定日期(请参见本答案中的时间类型#4),例如,“每周一晚上9点,即使DST发生变化。”假设我能算出哪天是我重复发生的事件的第一个星期一。问题是我如何指定当天晚上9点应该考虑到夏令时是否生效? 使用时区名称(Olson ID)指定日期是很直观的,例如,使用示例中的日期“7

  • 问题内容: 我将对各种rpc调用的响应存储在具有以下字段的mysql表中: 为和的所有现有组合选择最新响应的最佳方法是什么? 对于每个日期,对于给定的方法/ ID,只能有一个响应。 并非所有呼叫组合在给定日期都必须存在。 有数十种方法,数千个ID和至少365个不同的日期 样本数据: 所需结果: (我不认为这是同一个问题-它不会给我最新的信息) 问题答案: 自我回答,但是随着表的增长,我不确定这是否

  • 问题内容: 现在我用下面的查询按每篇文章的auto_increment id进行即时排序 我想知道如何按我创建的日期字段排序,该字段通过strtotime()存储当前日期,它应该查询从最新到最旧的日期。 当前代码 问题答案: 只需更改ORDER BY中的列即可: