我想做一个触发器,如果出生日期(其中一列)是将来的话,它将阻止插入。我有这个:
CREATE TRIGGER foo
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
IF NEW.birthdate > CURRENT_DATE()
THEN
//How do I prevent the insert right here???
END IF;
END;如何取消if语句中的插入?
发布于 2010-06-06 04:25:23
基于this,我不确定是否可以这样做。
目前的触发器实现中不支持主动抛出异常并中止产生触发器的语句。
我发现的解决办法是编写一个BEFORE触发器,将表中的一个非NULL列设置为NULL,从而违反其NOT NULL约束。这会导致产生触发器的语句被中止。
发布于 2014-03-19 03:37:53
示例1,MySQL,您可以使用signal sqlstate取消触发器中的插入
mysql> create table yar (val VARCHAR(25) not null);Query OK,0行受影响(0.02秒)
mysql>分隔符$$ mysql> create trigger foo before on yar -> -> each row -> begin -> if new.val = '‘then ->信号sqlstate '45000';-> end if;-> end;$$ Query OK,0 rows affected (0.01秒)
mysql>分隔符;mysql> insert insert insert YAR值(“”);错误1644 (45000):未处理的用户定义的异常条件mysql> insert YAR值(" abc ");查询正常,影响1行(0.01秒) mysql> select * from yar;+-+| val |+-+|abc|+-+1行in set (0.00sec)
你插入了一个空字符串,触发器看到它是空的,就发出信号来阻止插入。
示例2 MySQL通过使数据违反not null约束来取消触发器中的insert。
mysql> create table yar (val VARCHAR(25) not null);Query OK,0行受影响(0.02秒)
mysql>分隔符$$ mysql> create trigger foo before on yar -> -> each row -> begin -> if new.val = '‘then -> set new.val = NULL;-> end if;-> end;$$ Query OK,0 rows affected (0.01秒)
mysql>分隔符;mysql> insert YAR值(“”);错误1048 (23000):列' val‘mysql> insert insert YAR值(" abc ");查询正常,影响1行(0.01秒) mysql> select * from yar;+-+|val|+-+|abc|+-+1行in set (0.00sec)
您插入了一个空字符串,触发器看到它是空的,并将值更改为null,因此将阻止插入。
发布于 2015-07-24 22:53:30
我不知道是不是太晚了,但你现在可以这么做了:
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "your error text";附注:别忘了修改触发器前后的分隔符...
https://stackoverflow.com/questions/2981930
复制相似问题