Как проверить, какой столбец базы данных возвращает данные и обработать триггер MySQL - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть 3 оператора SQL Update.Они звонят из приложения.

1-й ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ

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

2-Й ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ

//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.Итак, я создаю триггер, используя 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

Я застрял здесь с тем, как проверить, какой столбец возвращает данные.Как я могу создать Trigger для выполнения этого без получения 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 или что-нибудь лучше.

Кто-нибудь может мне помочь?Заранее спасибо.

1 Ответ

0 голосов
/ 29 декабря 2018

Если я правильно понял, вам нужно обновлять db2, только если обновлено поле rel, и делать еще несколько обновлений, если вы получили endDate в своем запросе UPDATE.

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

Я надеюсь, что этоответ на ваш вопрос.Если это не так, попробуйте переписать вопрос сам, чтобы попытаться объяснить проблему немного подробнее.

...