如何查看哪个数据库列returns数据和处理MySQL触发器

How to check which database column returns data and process the MySQL Trigger

我有 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';

第三次更新查询

//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

我被困在这里如何检查哪一列 returns 数据。我如何创建触发器来完成此操作而不会出现任何 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';

In my Trigger, It's only updating 1st UPDATE Query. But I need to run 2nd and 3rd UPDATE Queries also in the Trigger. So how can I do it? Is there any validation that I can do to avoid NULL Error. Because if DB updates only rel I need to update rel only. So How can I know that what is updating? If DB updates with endDate I need to run 3rd UPDATE Query. If DB updates without endDate I need to run 2rd UPDATE Query. That's what I need.

I need to do all in one Trigger using ELSE IF or anything better.

有人可以帮助我吗?提前致谢。

如果我没理解错的话,只有当 rel 字段被更新时,你才需要更新你的 db2,如果你的 UPDATE 查询有一个 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

我希望这就是您问题的答案。如果不是,请尝试重写问题本身以尝试更多地解释问题。