gpt4 book ai didi

mysql - 添加正确的 MySQL 触发器

转载 作者:行者123 更新时间:2023-11-30 21:39:13 25 4
gpt4 key购买 nike

我有一个应该起作用的触发器,但它不起作用。

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

我需要,当表中的任何记录更新时,从表 mobile_app_drivers 的值 refresh 添加一个新的子字符串。

谢谢!

最佳答案

  • 您正在使用 session 变量@refresh。但是,您还没有在任何地方定义它。所以它只会被认为是空的。
  • 我修改了您的触发器,使其更清晰、更符合逻辑。声明了一个新变量 new_refresh,我们可以使用 Select 语句中的 Into 子句设置它的值。
  • 现在,调用更新语句。
  • 此外,您需要将 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 ;

关于mysql - 添加正确的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com