MySQL';更新时间戳';列触发器

MySQL';更新时间戳';列触发器,mysql,triggers,Mysql,Triggers,我正在将类型为DATETIME的列tsu(时间戳更新)添加到我的许多表中 我需要在更新之前编写触发器,将列更新为CURRENT\u TIMESTAMP(),但我无法正确执行。尝试: DELIMITER $$ CREATE TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE ON `cams`.`csi` FOR EACH ROW BEGIN UPDATE csi SET tsu = CURRENT_TIMESTAMP

我正在将类型为
DATETIME
的列
tsu
(时间戳更新)添加到我的许多表中

我需要在更新之前编写
触发器,将列更新为
CURRENT\u TIMESTAMP()
,但我无法正确执行。尝试:

DELIMITER $$
CREATE
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE
    ON `cams`.`csi`
    FOR EACH ROW BEGIN
        UPDATE csi SET tsu = CURRENT_TIMESTAMP WHERE csi_code = OLD.csi_code;
    END$$
DELIMITER ;
有人能告诉我正确的方向吗?
MTIA

如果该字段可以定义为时间戳,则可以使用以下内容:


不知道它是否适用于您,但您可以始终将其设置为一个没有默认值的
时间戳
字段——MySQL将在每次更新时自动将表中定义的第一个此类字段的值设置为当前时间戳。

好的,试试这个:

DELIMITER $$ CREATE  
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE  
    ON `cams`.`csi`  
      FOR EACH ROW BEGIN  
        SET NEW.tsu = CURRENT_TIMESTAMP;   
END$$ DELIMITER ;

ts2更新当前时间戳时的当前时间戳当前时间戳适用于一个或多个字段的日期时间和时间戳字段

因此,您可以使用datecreated
CURRENT\u TIMESTAMP
(作为默认值)

和dateupdated
CURRENT\u TIMESTAMP ON UPDATE CURRENT\u TIMESTAMP
适用于
DATETIME
TIMESTAMP
字段(作为默认值)


您可以在MySQL workbench中将上述内容用作SQL命令或默认值

感谢Zerofiz和Ian。我已经有了一个列
ts
,它被设置为默认的当前时间戳,因为它是用来表示“创建日期”的。从我对时间戳的阅读来看,不可能在一个ts列中使用当前时间戳作为默认值,在另一个列中使用更新时间戳(当然这正是我真正想要的)。我正在与客户核实,看看我们是否可以使用现有的
ts
字段作为“更新日期”,而不用“创建日期”。不,我不能这样做,如果我保留原始的
ts
列:`ts TIMESTAMP DEFAULT CURRENT\u TIMESTAMP`您可能应该在问题中提到,您已经有一个TIMESTAMP类型的列,默认值为CURRENT\u TIMESTAMP,用于存储记录创建时间。您是对的。我以前不理解多个时间戳列的含义。谢谢你的帮助。谢谢,这个例子正是我所需要的!现在更好地理解时间戳了。
DELIMITER $$ CREATE  
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE  
    ON `cams`.`csi`  
      FOR EACH ROW BEGIN  
        SET NEW.tsu = CURRENT_TIMESTAMP;   
END$$ DELIMITER ;