如何检查哪个数据库列返回数据并处理mysql触发器

nxowjjhe  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(318)

我有3个sql更新语句。它们是从应用程序调用的。
第一次更新查询

//only update rel column
UPDATE db1.data SET rel = 'x' WHERE tID = 'some value';

第二次更新查询

//here there is no endDate field
UPDATE db1.data SET action = 'some value' status = 'some value' startDate = 'some value' type = 'some value' WHERE tID = 'some value';

第3次更新查询

//but here it is endDate
UPDATE db1.data SET action = 'some value' status = 'some value' startDate = 'some value' endDate = 'some value' type = 'some value' WHERE tID = 'some value';

我要做的是,还有一个数据库叫做 db2 . 那什么时候 db1 使用我需要更新的更新查询进行更新 db2.data 还有table。所以我用 MySQL Workbench .
这是扳机,

CREATE DEFINER=`root`@`%` TRIGGER `db1`.`data_AFTER_UPDATE` AFTER UPDATE ON `data` FOR EACH ROW
BEGIN
IF NEW.rel<> OLD.rel/*= 'x'*/ THEN
UPDATE db2.data
SET rel = NEW.rel
WHERE tID = NEW.tID;
END IF;
END

我被困在这里与如何检查哪列返回数据。我怎样才能在没有得到任何帮助的情况下为实现这一点创建触发器呢 NULL 错误?
基本上我需要的是,

if NEW.rel <> OLD.rel run this -> UPDATE db2.data SET rel = NEW.rel WHERE tID = NEW.tID;

if data returns with this column `endDate` I need to do this -> UPDATE db1.data SET action = 'some value' status = 'some value' startDate = 'some value' endDate = 'some value' type = 'some value' WHERE tID = 'some value';

and if not returning values for `endDate` I need to run this -> UPDATE db1.data SET action = 'some value' status = 'some value' startDate = 'some value' type = 'some value' WHERE tID = 'some value';

在我的 Trigger ,只是在更新 1st UPDATE Query . 但我得走了 2nd and 3rd UPDATE Queries 同样在 Trigger . 那我怎么做呢?我能做些什么来避免验证吗 NULL Error . 因为如果数据库只更新 rel 我需要更新 rel 只是。那我怎么知道是什么在更新呢?如果数据库更新为 endDate 我要跑了 3rd UPDATE Query . 如果数据库更新没有 endDate 我要跑了 2rd UPDATE Query . 这就是我需要的。
我需要使用 ELSE IF 或者更好的。
有人能帮我吗?提前谢谢。

pbgvytdp

pbgvytdp1#

如果我理解正确的话,您只需要在rel字段被更新的情况下更新db2,如果您的更新查询中有enddate,则需要进行更多的更新。

CREATE DEFINER=`root`@`%` TRIGGER `db1`.`data_AFTER_UPDATE` AFTER UPDATE ON `data` FOR EACH ROW
BEGIN
IF OLD.rel <> NEW.rel THEN
 UPDATE db2.data SET rel = NEW.rel WHERE tID = NEW.tID;
 IF OLD.endDate = NEW.endDate OR NEW.endDate IS NULL THEN
  UPDATE db1.data SET action = 'some value' status = 'some value' startDate = 'some value' type = 'some value' WHERE tID = NEW.tID;
 ELSE
  UPDATE db1.data SET action = 'some value' status = 'some value' startDate = 'some value' endDate = 'some value' type = 'some value' WHERE tID = NEW.tID;
 END IF;
END IF;
END

我希望这就是你问题的答案。如果不是,请试着重新写问题本身,试图解释问题多一点。

相关问题