MySQL 后端更新时触发错误

MySQL Trigger error while updating in backend

您好,我需要帮助解决以下问题。我有 table 数据每分钟更新一次。我在 table.

上设置了触发器
    CREATE DEFINER=`root`@`localhost` TRIGGER `gsdatatabs_AFTER_UPDATE` AFTER UPDATE ON 
      `gsdatatabs` FOR EACH ROW BEGIN
       IF NEW.CAMARILLA = 'B' or NEW.CAMARILLA = 'S' then
            UPDATE gsdatatabs SET ALERT = NEW.LTP;
       END IF;
    END

下面是我的table结构

Columns:
SCRIP varchar(45) 
LTP float 
OHL varchar(45) 
ORB15 varchar(45) 
ORB30 varchar(45) 
PRB varchar(45) 
CAMARILLA varchar(45) 
ALERT float

当 CAMARILLA 值为 'B' 或 'S' 时,我正在尝试使用来自 LTP 的值更新 ALERT 列。在后端,CAMARILLA 列的数据每分钟更新一次。

目前在后台更新时出错。

Error: Can't update table 'gsdatatabs' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    at Packet.asError (C:\Users\sprasadswain\Documents\googleSheet\AutoTrader\Server\node_modules\mysql2\lib\packets\packet.js:722:17)
    at Query.execute (C:\Users\sprasadswain\Documents\googleSheet\AutoTrader\Server\node_modules\mysql2\lib\commands\command.js:28:26)
    at Connection.handlePacket (C:\Users\sprasadswain\Documents\googleSheet\AutoTrader\Server\node_modules\mysql2\lib\connection.js:456:32)
    at PacketParser.onPacket (C:\Users\sprasadswain\Documents\googleSheet\AutoTrader\Server\node_modules\mysql2\lib\connection.js:85:12)
    at PacketParser.executeStart (C:\Users\sprasadswain\Documents\googleSheet\AutoTrader\Server\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.<anonymous> (C:\Users\sprasadswain\Documents\googleSheet\AutoTrader\Server\node_modules\mysql2\lib\connection.js:92:25)
    at Socket.emit (events.js:315:20)

敬请指导

看来你需要在

CREATE DEFINER=`root`@`localhost` TRIGGER `gsdatatabs_BEFORE_UPDATE` 
BEFORE UPDATE ON `gsdatatabs` 
FOR EACH ROW 
SET NEW.alert = CASE WHEN NEW.camarilla IN ('B', 'S')
                     -- AND NEW.alert IS NULL
                     THEN NEW.ltp
                     ELSE NEW.alert
                     END;

改成更新前

CREATE DEFINER=`root`@`localhost` TRIGGER `gsdatatabs_AFTER_UPDATE` BEFORE UPDATE ON 
  `gsdatatabs` FOR EACH ROW BEGIN
   IF NEW.CAMARILLA = 'B' or NEW.CAMARILLA = 'S' then
        SET NEW.ALERT = NEW.LTP;
   END IF;
END