触发器 - 如何在更新另一列时更改另一列 - MySQL

Posted

技术标签:

【中文标题】触发器 - 如何在更新另一列时更改另一列 - MySQL【英文标题】:Triggers - How to change another column when one is updated - MySQL 【发布时间】:2019-10-13 03:54:10 【问题描述】:

我得到了一个用例,如果其他相同类型的字段发生变化,用户需要更新某个 TIME 字段。

我得到了两列

horario_arribo(时间)

horario_salida (TIME)

现在,我需要做的是以下

制作一个触发器,所以当我更改例如 horario_arribo 时,horario_salidahorario_arribo 的 TIME 减去 1 小时相同,如果我更新 horario_salida ,使 horario_arribo 加 1 小时。

我一直在想怎么做,首先检查尝试更新的值是否是horario_salida,然后我只是增加1小时到horario_arribo,或者如果我我正在更新 horario_arribo,与 horario_salida 相同,但要减去 1 小时。

DELIMITER //
CREATE TRIGGER modificar_horarioruta AFTER
UPDATE ON ruta
FOR EACH ROW
BEGIN
IF(new.horario_salida) THEN
  SET AddTime(old.horario_arribo, '00:60:00')
ELSE
  SET AddTime(old.horario_salida, Here I dont know how to minus 1 hour to that)
END IF;
END //
DELIMITER ;

这是我的数据

所以,简而言之,如果我更新 horario_salidahorario_arribo 需要提前 1 小时,如果我更新 horario_arribo horario_salida 需要减少 1 小时。

谢谢

【问题讨论】:

【参考方案1】:

IIUC:

DELIMITER //
CREATE TRIGGER modificar_horarioruta AFTER
UPDATE ON ruta
FOR EACH ROW
BEGIN
IF (NEW.horario_salida) THEN
  SET NEW.horario_arribo = OLD.horario_arribo + 1;
ELSE
  SET NEW.horario_salida = OLD.horario_salida - 1;
END IF;
END //
DELIMITER ;

如果这不是您需要的,请告诉我。

【讨论】:

以上是关于触发器 - 如何在更新另一列时更改另一列 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章

当您需要基于另一列更新列时,在 Pandas 中循环的替代方法

更新另一列时,使用列名作为 PL/SQL 关联数组的键

SQL - 在填充另一列时继承派生列值

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

如何通过添加另一列的前缀来创建触发器以更新列

插入另一列时重复 AUTO_INCREMENT Id?