mysql:仅当满足某些条件时插入
我试图找到一种方法,在表中添加新元组之前,检查元组是否符合某些条件,如果其中一个条件不符合,则不允许插入 我想到了类似的事情mysql:仅当满足某些条件时插入,mysql,Mysql,我试图找到一种方法,在表中添加新元组之前,检查元组是否符合某些条件,如果其中一个条件不符合,则不允许插入 我想到了类似的事情 DELIMITER // CREATE TRIGGER t BEFORE INSERT ON Table FOR EACH ROW CALL CHECK1(…); CALL CHECK2(…); CALL CHECK3(…); // DELIMITER; 其中,check1、check2、check3是
DELIMITER //
CREATE TRIGGER t BEFORE INSERT ON Table
FOR EACH ROW
CALL CHECK1(…);
CALL CHECK2(…);
CALL CHECK3(…);
//
DELIMITER;
其中,check1、check2、check3是在我传递的新.(属性)不符合插入表和/或其他表中的条件时引发异常的过程
- 这是一个正确的和/或好的方式,使我的尝试吗
- 最好的方法是什么
- 最好的方法是使用存储过程而不是触发器进行数据验证。如果您只想筛选传入数据,则触发器策略非常有用。如果目标是在数据值不合适时完全取消操作,则不能在MySQL中使用触发器执行此操作。我的回答是回复(带有一条注释,我的回答将无法理解),并提供更多详细信息:
我使用了两种策略来实现我的目标,这里有两个例子
1) 如果检查容易的话
DELIMITER $$
create trigger RV5_1 before insert on Customer
for each row begin
IF(DATEDIFF(CURDATE(),NEW.birthdate)/365<18)
THEN
SIGNAL sqlstate '45006' set message_text = "too young to be a customer";
END IF;
END;
$$
DELIMITER ;
其中check1和check2是存储的函数,如果正常,则返回0;如果新元组出现问题,则返回1
也许有同样问题的人会发现这很有帮助
DELIMITER $$
create trigger T2 before insert on Table
for each row begin
IF (check1(NEW.[_some_attribute/s_]) or
check2(NEW.[_some_attribute/s_]))
THEN
SIGNAL sqlstate '45002' set message_text = "invalid insert";
END IF;
END;
$$;
DELIMITER ;