MySQL触发器可以模拟CHECK约束吗?

smn*_*ane 10 mysql triggers constraints

我想在MySQL中使用CHECK约束,但它不受支持.(与其他RDBMS不同,它会理解但不强制执行CHECK.)

我看过一些触发器的解决方法.但他们倾向于为相关字段设置默认值,而不是返回错误.

如果不满足条件,是否可以构造一个返回错误的触发器?

最终我想要一个复制CHECK约束的触发器.

abh*_*sia 14

当您更新数据时:

delimiter $$
create trigger chk_stats1 before update on stats 
  for each row 
   begin  
    if  new.month>12 then
        SIGNAL SQLSTATE '45000'   
        SET MESSAGE_TEXT = 'Cannot add or update row: only';
      end if; 
      end; 
      $$
Run Code Online (Sandbox Code Playgroud)

当您插入数据时:

   delimiter $$
    create trigger chk_stats before insert on stats 
      for each row 
       begin  
      if  new.month>12 then
       SIGNAL SQLSTATE '45000'   
       SET MESSAGE_TEXT = 'Cannot add or update row: only';
       end if; 
    end; 
    $$
Run Code Online (Sandbox Code Playgroud)

这些触发器将作为检查约束,在插入或更新之前工作并检查月份,如果month> 12给出错误.


Nal*_*ial 7

从MySQL 5.5开始,您可以使用SIGNAL语法从存储过程(如触发器)返回错误.


Nav*_*mar 3

尝试以下语法

CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;
Run Code Online (Sandbox Code Playgroud)