gpt4 book ai didi

mysql - 创建触发器中的语法错误,出了什么问题?

转载 作者:可可西里 更新时间:2023-11-01 07:16:46 31 4
gpt4 key购买 nike

有人可以告诉我我的代码语法有什么问题吗? (这是我突出显示并运行的确切且唯一的代码,因此行号应该匹配)

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;

我得到了这两个错误:

错误代码:1064。您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 9 行的 '' 附近使用的正确语法

错误代码:1064。您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“end if”附近使用的正确语法

最佳答案

您忘记更改分隔符,所以 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;

只需在代码前添加:

DELIMITER $$

...以及之后的内容:

$$

...因此 MySQL 可以将完整的触发器识别为单个语句。

您可以根据自己的选择更改$$

官方文档在 Defining Stored Programs 中提供了这方面的详细信息部分。


请注意,此问题仅影响可以一次接受多个语句的 MySQL 客户端,因此它们会使用分隔符来区分它们。 DELIMITER是mysql命令行工具的命令;它可能会也可能不会在其他客户端中实现。

关于mysql - 创建触发器中的语法错误,出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13492019/

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