msql,触发器无事物回滚,插入之前满足条件再插入
很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入
如果用sqlserver 或者orcale 就很简单,按sqlserver 和orcale的思路去找事物回滚,或者抛异常,都没用,最后只有不断查资料不断尝试,只有用mysql的触发器机制,触发器中无法修改,删除原表的值,也无法有返回值
最后代码如下
CREATE
TRIGGER `duanxin_before_insert` BEFORE INSERT ON `t_duanxin`
FOR EACH ROW BEGIN
DECLARE msgcount INT(10);
SET msgcount=(SELECT COUNT(*) FROM t_duanxin WHERE FIND_IN_SET(new.to_phone, to_phone) AND new.content=content);
IF msgcount>0 THEN
DELETE FROM t_duanxin WHERE id=new.id;
END IF;
END;
加粗部分是条件判断不满足就执行删除操作,执行删除就会报错就不会插入数据
感觉这中方式有搓,就好比在代码中手动抛出异常一样,一点都不友好.不过没办法暂时只有这种实现方式了