MySQL触发器不';不行?

MySQL触发器不';不行?,mysql,triggers,Mysql,Triggers,所以我马上就要做这个测试了,我正在做练习测试,但不知怎么的,我的触发器不起作用了。我完全按照别人教我的做了,但这根本不起作用。有人能帮我吗 我创建了这个表: CREATE TABLE DiscountActions( discountID int(5) NOT NULL AUTO_INCREMENT, dishName varchar(70) NOT NULL, type varchar(70) NOT NULL, discountPercentage varchar(70) NOT NULL,

所以我马上就要做这个测试了,我正在做练习测试,但不知怎么的,我的触发器不起作用了。我完全按照别人教我的做了,但这根本不起作用。有人能帮我吗

我创建了这个表:

CREATE TABLE DiscountActions(
discountID int(5) NOT NULL AUTO_INCREMENT,
dishName varchar(70) NOT NULL,
type varchar(70) NOT NULL,
discountPercentage varchar(70) NOT NULL,
startdate date NOT NULL,
enddate date NOT NULL,
PRIMARY KEY (discountID)
);
我想添加这个触发器:

DELIMITER //
CREATE TRIGGER `checkStartDatum` 
AFTER INSERT ON `DiscountActions`
FOR EACH ROW 
BEGIN 
  IF NEW.startdate < DATE(NOW()) 
     THEN DELETE 
        FROM DiscountActions
        WHERE startdate = NEW.startdate;
  END IF ;
END ; 
//
分隔符//
创建触发器“checkStartDatum”
在插入“折扣”之后`
每行
开始
如果NEW.startdate<日期(现在())
然后删除
来自折扣
其中startdate=NEW.startdate;
如果结束;
结束;
//
但是当我添加它时,会出现以下错误:我得到以下错误:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第6行“THEN DELETE FROM kortingactie WHERE begindatum=NEW.b”附近使用的正确语法


它应该做的是:当你添加一个新的折扣时,它应该检查起始日期是否在过去。如果startdate在过去,它应该删除整个折扣操作,因为这是不可能的。

您的触发器没有语法错误。这里有一个说明了这一点。但不幸的是,你的扳机不起作用。当条件满足时,您将以错误告终

无法更新存储函数/触发器中的表“折扣” 因为它已经被调用此存储的 功能/触发器

现在,为了防止在
startdate
<当前日期时插入行,您可以:

  • 将触发器从
    之后更改为
    之前
  • 如果满足条件,则只需违反现有约束之一。由于表中的
    startdate
    具有
    notnull
    约束,因此我们可以利用该约束
  • 下面是一个工作版本的触发器的外观

    CREATE TRIGGER checkStartDatum
    BEFORE INSERT ON DiscountActions
    FOR EACH ROW 
      SET NEW.startdate = IF(NEW.startdate < CURDATE(), NULL, NEW.startdate);
    
    CREATE TRIGGER checkStartDatum
    在插入折扣之前
    每行
    设置NEW.startdate=IF(NEW.startdate
    它是一个单语句触发器,所以您甚至不需要更改分隔符


    这里是演示。取消对最后一条insert语句的注释,并查看触发器是否不允许插入。

    运行此查询时,您收到了什么错误?我收到以下错误:#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解可使用的正确语法。第6行的“然后从kortingactie中删除,其中begindatum=NEW.b”是的,它是@a_horse_,带有_no_名称。我试过了,非常适合我。你是从什么地方复制粘贴的吗?也许里面有隐藏的控制符号?哇。。。我试了十几次,都没有结果。。。我确实是通过一个例子写的。所以我没有抄。我会再试一次。。。