我有一个应该起作用的触发器,但是它不起作用。
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
添加一个新的子字符串。
谢谢!
答案 0 :(得分:0)
@refresh
。但是,您尚未在任何地方定义它。因此,它将仅视为空。new_refresh
,我们可以在Select语句中使用Into
子句设置其值。您可以将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 ;
答案 1 :(得分:0)
为什么要使用变量?只要做:
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 ;