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_id
、R_2000ml
。表 B 有diff
,val
。当R_2000ml
更新时,我正在编写一个触发器来更新表B。我正在计算 NEW.R_2000ml
和 OLD.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 更新一个字段,表中的其他datetime类型字段全部变成了当前时间。
当我尝试更新表中的值时,我得到 java.lang.NumberFormatException: For input string: "id(id=1)"