首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些条件下阻止插入的MySQL触发器

问在某些条件下阻止插入的MySQL触发器
EN

Stack Overflow用户
提问于 2010-06-06 04:18:28
回答 6查看 75.4K关注 0票数 45

我想做一个触发器,如果出生日期(其中一列)是将来的话,它将阻止插入。我有这个:

代码语言:javascript
复制
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语句中的插入?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-06-06 04:25:23

基于this,我不确定是否可以这样做。

目前的触发器实现中不支持主动抛出异常并中止产生触发器的语句。

我发现的解决办法是编写一个BEFORE触发器,将表中的一个非NULL列设置为NULL,从而违反其NOT NULL约束。这会导致产生触发器的语句被中止。

票数 7
EN

Stack Overflow用户

发布于 2014-03-19 03:37:53

示例1,MySQL,您可以使用signal sqlstate取消触发器中的插入

  1. 创建包含varchar列的表:

mysql> create table yar (val VARCHAR(25) not null);Query OK,0行受影响(0.02秒)

  • 创建'before insert‘触发器以检查条件并禁止。

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。

  1. 创建包含varchar列的表:

mysql> create table yar (val VARCHAR(25) not null);Query OK,0行受影响(0.02秒)

  • 创建'before insert‘触发器以检查条件并禁止。

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,因此将阻止插入。

票数 62
EN

Stack Overflow用户

发布于 2015-07-24 22:53:30

我不知道是不是太晚了,但你现在可以这么做了:

代码语言:javascript
复制
SIGNAL SQLSTATE '45000' 
SET MESSAGE_TEXT = "your error text";

附注:别忘了修改触发器前后的分隔符...

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2981930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档