MySQL 触发器用于在更新当前表中的值时更新另一个表

Posted

技术标签:

【中文标题】MySQL 触发器用于在更新当前表中的值时更新另一个表【英文标题】:MySQL trigger for updating another table on updating value in current table 【发布时间】:2017-06-15 15:10:10 【问题描述】:

我在 mysql 数据库中有两个表 A 和 B。表 A 具有 brnd_idR_2000ml。表 B 有diff,val。当R_2000ml 更新时,我正在编写一个触发器来更新表B。我正在计算 NEW.R_2000mlOLD.R_2000ml 的差异,并将结果存储在 diff 列中,并将布尔值作为 1 传递以在表 B 的 val 列中进行更新。

以下是我的触发代码,由于表 B 中的值未更新,因此无法正常工作。

DELIMITER //
  DROP TRIGGER IF EXISTS `myTrigger`;
  CREATE DEFINER=`root`@`localhost` TRIGGER `myTrigger` 
  AFTER UPDATE ON `A` 
  FOR EACH ROW 
    BEGIN 
      DECLARE brndid integer; 
      DECLARE stkdate date; 
      if NEW.`R_2000ml` <=> OLD.`R_2000ml` 
      THEN 
        if NEW.`R_2000ml` > OLD.`R_2000ml` 
        THEN 
          update B set diff= NEW.R_2000ml- OLD.R_2000ml,val=1; 
        END IF; 
      END IF; 
   END;//
DELIMITER ;

【问题讨论】:

您的触发器应该更新 B 中的 all 行。 . .这是你的意图吗? 表 B 仅包含一行,将用于其他目的。 【参考方案1】:

在你的 if 子句中使用“”,这个操作符像 = 操作符一样执行相等比较,所以你应该使用 或 !=:

if NEW.`R_2000ml` <> OLD.`R_2000ml`

if NEW.`R_2000ml` != OLD.`R_2000ml`

【讨论】:

以上是关于MySQL 触发器用于在更新当前表中的值时更新另一个表的主要内容,如果未能解决你的问题,请参考以下文章

Mysql进阶4

MySQL 更新一个字段,表中的其他datetime类型字段全部变成了当前时间。

当我尝试更新表中的值时,我得到 java.lang.NumberFormatException: For input string: "id(id=1)"

mysql如何根据一列值更新另一列的值?

在更新触发器之前或之后更改同一表中的值(oracle)

更新查询以根据另一表中的值更改一个表中列的现有值