为什么这个触发器有语法错误? MySQL 工作台错误:1064

问题描述 投票:0回答:1

对于一个包含产品列表的项目,我正在尝试进行一些统计,但是我正在创建的 Tigrer 在编译级别上存在语法错误(执行前没有错误)。

在我的统计表中,有一个日期类型:DATE,其他为 INT DEFAULT 0,我的触发器应在创建列表时增加统计表。

为了确保存在具有 DATE 的行,我在 UPDATE() 之前有一个触发器和一个用于区分所有内容的过程。但它们实际上都没有使用或不使用分隔符,并且以不同的方式来编写正文。


DROP PROCEDURE IF EXISTS new_day;
Delimiter $
CREATE PROCEDURE new_day()
BEGIN
-- seems that the error come from the WHERE day = DATE( "here" )) is...
    IF (SELECT day FROM stats WHERE day = DATE()) is null THEN
        INSERT INTO stats (day) VALUES (DATE());
    END IF;
END;
END$ 
Delimiter ;


DROP TRIGGER IF EXISTS Trig_BEFORE_ANY_update_stats; 
Delimiter $
CREATE TRIGGER Trig_BEFORE_ANY_update_stats
BEFORE UPDATE ON stats FOR EACH ROW 
BEGIN
call new_day() ;
IF (SELECT day from stats where day=DATE()) is null THEN
        SIGNAL SQLSTATE VALUE '45000'
            SET MESSAGE_TEXT = "There is no tomorrow, die()";
END IF; 
END$ 
Delimiter ;


DROP TRIGGER IF EXISTS Trig_AFTER_LIST_CREATED;
Delimiter $
CREATE TRIGGER Trig_AFTER_LIST_CREATED
AFTER INSERT ON SAE_Liste FOR EACH ROW
BEGIN
UPDATE stats SET nb_List_CREATED_per_Day = nb_List_CREATED_per_Day + 1 WHERE day = DATE();
END$
Delimiter ;

我发现一切都有效,但事实并非如此,相反我得到了:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')) is null THEN         INSERT INTO stats (day) VALUES (DATE(NOW()));     END...' at line 3
mysql triggers mysql-workbench
1个回答
0
投票

多亏了人们的评论,问题不再存在了。表不能是调用触发器而触发器再调用表的东西。

使用

INSERT INTO stats (
day
, 
nb_List_CREATED_per_Day
) VALUES (CURRENT_DATE, 1) ON DUPLICATE KEY UPDATE 
nb_List_CREATED_per_Day
=
nb_List_CREATED_per_Day
 + 1;
和变体后,一切都有效。

谢谢大家。

创建触发器 Trig_AFTER_LIST_DELETE 在 SAE_Liste 上删除每行开始后 插入统计数据 (

day
,
nb_List_DELETE_per_Day
) 值 (CURRENT_DATE, 1)

重复密钥更新

nb_List_DELETE_per_Day
=
nb_List_DELETE_per_Day
+ 1;

结束 $ 分隔符;

© www.soinside.com 2019 - 2024. All rights reserved.