Kel*_*sen 4 mysql triggers if-statement sql-update
有人可以告诉我我的代码的语法有什么问题吗?(这是我正在突出显示并运行的唯一代码,因此行号应匹配)
CREATE TRIGGER `trg_part_upd` AFTER UPDATE ON `tbl_sub_model_eng_trans_part`
FOR EACH ROW
if NEW.engine_sk = 0 and NEW.trans_sk = 0
then
UPDATE tbl_sub_model tsm
INNER JOIN tbl_fct_sub_eng_trans tfset ON tsm.sub_model_sk = tfset.sub_model_sk
INNER JOIN tbl_sub_model_eng_trans_part tsmetp ON tfset.trans_sk = tsmetp.trans_sk
SET tsm.last_modified_date = NOW()
WHERE tsmetp.sub_model_sk=NEW.sub_model_sk;
end if;
Run Code Online (Sandbox Code Playgroud)
我收到这两个错误:
错误代码:1064.您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在第9行的''附近使用正确的语法
错误代码:1064.您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的'end if'附近使用正确的语法
Álv*_*lez 10
你忘了更改分隔符,所以MySQL认为你的第一个语句是这样的:
CREATE TRIGGER `trg_part_upd` AFTER UPDATE ON `tbl_sub_model_eng_trans_part`
FOR EACH ROW
if NEW.engine_sk = 0 and NEW.trans_sk = 0
then
UPDATE tbl_sub_model tsm
INNER JOIN tbl_fct_sub_eng_trans tfset ON tsm.sub_model_sk = tfset.sub_model_sk
INNER JOIN tbl_sub_model_eng_trans_part tsmetp ON tfset.trans_sk = tsmetp.trans_sk
SET tsm.last_modified_date = NOW()
WHERE tsmetp.sub_model_sk=NEW.sub_model_sk;
Run Code Online (Sandbox Code Playgroud)
只需在代码之前添加:
DELIMITER $$
Run Code Online (Sandbox Code Playgroud)
......之后:
$$
Run Code Online (Sandbox Code Playgroud)
...所以MySQL可以将完整的触发器识别为单个语句.
您可以根据$$自己的选择进行更改.
官方文档在" 定义存储程序"部分中提供了相关详细信息.