Добавьте правильный триггер MySQL - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть триггер, который должен работать, но он не работает.

BEGIN
    DECLARE `refresh` VARCHAR(256);
    SET `refresh` = concat((SELECT `refresh` FROM `mobile_app_drivers` WHERE `id` = 1), '&');
    UPDATE `mobile_app_drivers` SET `refresh` = @refresh WHERE `id` = 1;
END

При выполнении ячейка **refresh** все еще передает пустую строку.

// КАК Я СОЗДАЮ ЭТО

DROP TRIGGER IF EXISTS `SET_UNIQUE_KEY`;
CREATE DEFINER=`root`@`localhost` TRIGGER `SET_UNIQUE_KEY` AFTER UPDATE ON `mobile_app_orders` FOR EACH ROW
BEGIN
DECLARE `refresh` VARCHAR(256);
SET `refresh` = concat((SELECT MAX(`refresh`) FROM `mobile_app_drivers` WHERE `id` = 1), '&');
UPDATE `mobile_app_drivers` SET `refresh` = @refresh WHERE `id` = NEW.driver;
END

Мне нужно, когда обновляется любая запись из таблицы, затем добавляется новая подстрока из значения refresh из таблицы mobile_app_drivers.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Почему вы используете переменную?Просто сделай:

DROP TRIGGER IF EXISTS `SET_UNIQUE_KEY`;

DELIMITER $$

CREATE DEFINER=`root`@`localhost` TRIGGER `SET_UNIQUE_KEY` AFTER UPDATE ON `mobile_app_orders`
FOR EACH ROW
BEGIN
    UPDATE mobile_app_drivers CROSS JOIN
           (SELECT MAX(refresh) as max_refresh
            FROM mobile_app_drivers
            WHERE id = 1
           ) mad1      
        SET refresh = concat(mad1.max_refresh, '&')
        WHERE id = NEW.driver;
END;
DELIMITER ;
0 голосов
/ 27 сентября 2018
  • Вы используете переменную сеанса @refresh.Однако вы нигде не определили это.Поэтому он будет считаться пустым.
  • Я изменил ваш триггер, чтобы сделать его более понятным и логичным для подражания.Объявлена ​​новая переменная new_refresh, и мы можем установить ее значение с помощью предложения Into внутри оператора Select.
  • Теперь вызовем оператор обновления.
  • Также необходимо переопределить Delimiter длячто-то еще (например: $$) вместо (;).
  • В конце переопределите DELIMITER для;

Вы можете изменить свой оператор Create Trigger следующим образом:

DELIMITER $$
DROP TRIGGER IF EXISTS `SET_UNIQUE_KEY` $$
CREATE DEFINER=`root`@`localhost` TRIGGER `SET_UNIQUE_KEY` AFTER UPDATE ON `mobile_app_orders` FOR EACH ROW
BEGIN
DECLARE new_refresh VARCHAR(256) DEFAULT '';

SELECT CONCAT(MAX(`refresh`), '&') INTO `new_refresh` 
FROM `mobile_app_drivers` 
WHERE `id` = 1;

UPDATE `mobile_app_drivers` SET `refresh` = new_refresh WHERE `id` = NEW.driver;
END $$
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...