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_名称。我试过了,非常适合我。你是从什么地方复制粘贴的吗?也许里面有隐藏的控制符号?哇。。。我试了十几次,都没有结果。。。我确实是通过一个例子写的。所以我没有抄。我会再试一次。。。