MySQL/MariaDB触发器

MySQL/MariaDB触发器,mysql,Mysql,当我试图在MySQL/MariaDB上创建下面的触发器时,我遇到了一个错误 CREATE TRIGGER `ABC` BEFORE INSERT ON `TABLE1` FOR EACH ROW BEGIN DECLARE LCL_VAR INTEGER; SET LCL_LCL_VAR = NEW.A - NEW.B; SET NEW.D= V; END; 错误 在插入任务之前创建触发器Q\u DUR\u CALC 每行开始 声明LCL_Q_DUR整数 MySQL说:文档 1064-您

当我试图在MySQL/MariaDB上创建下面的触发器时,我遇到了一个错误

CREATE TRIGGER `ABC` BEFORE INSERT ON `TABLE1`
FOR EACH ROW BEGIN
DECLARE LCL_VAR INTEGER;
SET LCL_LCL_VAR = NEW.A - NEW.B;
SET NEW.D= V;   
END;
错误 在插入任务之前创建触发器
Q\u DUR\u CALC
每行开始 声明LCL_Q_DUR整数

MySQL说:文档

1064-您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解第3行“”附近要使用的正确语法 我有几个其他的触发器,我用来构建这个触发器。我不知道这在语法上有什么错。我可以请求帮助找出这个问题吗?

问题出在结束后的“;”上。奇怪的是,它抱怨3号线

这是正确的版本

CREATE TRIGGER `Q_DUR_CALC` BEFORE INSERT ON `TASK_Q_SWH`
FOR EACH ROW BEGIN
DECLARE LCL_Q_DUR INTEGER;
SET LCL_Q_DUR = NEW.TQ_TASK_DUR - NEW.TQ_TASK_RUN_DUR;
SET NEW.TQ_Q_DUR = LCL_Q_DUR;   
END

编写触发器时,必须指定分隔符,以便mysql在指定的分隔符内显式执行触发器块。如果未提供分隔符,则在遇到任何
在触发器语句中,它将尝试执行命令直到该块,因此可能会出现错误

如果您正在使用任何用户界面工具生成触发器,您可以检查是否有一个选项可以像PHPMyadmin中那样设置分隔符

在CLI中,触发器需要有一个分隔符,它将变为

delimiter //

create trigger Q_DUR_CALC before insert on TASK_Q_SWH
for each row
begin
 declare LCL_Q_DUR INTEGER;
 set LCL_Q_DUR = new.TQ_TASK_DUR - new.TQ_TASK_RUN_DUR;
 SET new.TQ_Q_DUR = LCL_Q_DUR;   
end;//

delimiter ;

谢谢你,阿比克。谢谢你的解释。谢谢:)