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

MySQL ON UPDATE trigger-使用当前的时间戳和条件更新同一个表

苗征
2023-03-14


我有一个MySQL(5.1.67)表“跟踪器”,带有时间戳字段“close_time”
在同一个表中,我有字符串字段“status”
当状态字段更新为特定文本值时,我想用当前的时间戳值更新关闭时间字段,例如“关闭”。

以下是INSERT的示例:在提交INSERT之前,如何编写更新同一表中的行的触发器?

我试过这样的方法:

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW
      BEGIN
     IF NEW.status = 'Closed' THEN
     SET NEW.close_time = CURRENT_TIMESTAMP;     
     END IF;
     END

但我有一个错误:你的SQL语法有一个错误。。。在四号线

我尝试了一些其他的变化,但我发现它们都不起作用。请帮助为我的情况创建正确的触发器。

共有2个答案

禄和宜
2023-03-14

你没有告诉它要更新什么。

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW
      BEGIN
     IF NEW.status = 'Closed' THEN
       update tracker 
         SET NEW.close_time = CURRENT_TIMESTAMP;
     END IF;
   END
狄旻
2023-03-14

你设置了DELIMITER吗?

这应该是有效的:

DELIMITER $$

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW
      BEGIN
     IF NEW.status = 'Closed' THEN
     SET NEW.close_time = CURRENT_TIMESTAMP;     
     END IF;
     END $$

DELIMITER ;     
 类似资料:
  • 问题内容: 我在mysql表中具有属性为“ ON UPDATE CURRENT_TIMESTAMP”的时间戳。有没有办法在特殊情况下手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新添加日期) 问题答案: 有没有办法在特殊情况下手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新添加日期) 听起来您需要配置默认约束,以便仅在插入时填充列: 将其更改为仅这意味着任何修订都不会触发时

  • 问题内容: 对于某些Hibernate实体,我们需要存储其创建时间和上次更新时间。你将如何设计? 你将在数据库中使用什么数据类型(假设使用MySQL,可能与JVM时区不同)?数据类型是否支持时区? 你会在Java中使用什么数据类型(Date,Calendar,long,…)? 你将由谁负责设置时间戳(数据库,ORM框架(hibernate)或应用程序程序员)? 你将使用哪些注释进行映射(例如@Te

  • 问题内容: 我在玩JPA(具体来说是Eclipselink)。下面的实体具有一个时间戳,应该在该实体上次更新时反映该时间戳。 每次更改此实体时,使JPA自动更新该时间戳的策略是什么? 如果我还想要一个“创建”时间戳记,该时间戳记仅在实体首次保留时设置,而永远不允许再次更改,该怎么办? 问题答案: 使用@PrePersist和@PreUpdate批注并编写您自己的事件侦听器。 详细了解一下此答案。它

  • 问题内容: 民间, 我试图了解MomentJS API。在机器上获取当前时间的合适方法是什么? 与 试图解析他们的文档,并且不清楚使用什么。 http://momentjs.com/docs/#/query/is-a- moment/ 问题答案: 在这里,您要为CurrentDate分配一个momentjs实例: 这里只是一个字符串,是momentjs实例的默认格式的结果: 这里是自一月…以来的秒

  • 问题内容: 我想要这样的当前时间戳: 1320917972 问题答案: 解决方案是:

  • 数据库有个字段时时间戳格式的,现在前台传过来的参数类型是【0500】这样的String,怎么能用SQL做到用传来的String参数只更新这个字段的时和分的部分,使结果变成【2023-10-16 05:00:00】?