如何查看哪个数据库列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
我希望这就是您问题的答案。如果不是,请尝试重写问题本身以尝试更多地解释问题。
我有 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 updating1st UPDATE Query
. But I need to run2nd and 3rd UPDATE Queries
also in theTrigger
. So how can I do it? Is there any validation that I can do to avoidNULL Error
. Because if DB updates onlyrel
I need to updaterel
only. So How can I know that what is updating? If DB updates withendDate
I need to run3rd UPDATE Query
. If DB updates withoutendDate
I need to run2rd 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
我希望这就是您问题的答案。如果不是,请尝试重写问题本身以尝试更多地解释问题。