msql,触发器无事物回滚,插入之前满足条件再插入
16lz
2021-01-22
很少写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;
加粗部分是条件判断不满足就执行删除操作,执行删除就会报错就不会插入数据
感觉这中方式有搓,就好比在代码中手动抛出异常一样,一点都不友好.不过没办法暂时只有这种实现方式了
更多相关文章
- 使用不同的条件,在同一个表的一个SQL查询中使用多个聚合函数
- SQL:如何从另一个表中删除行会议条件
- 如何检查具有多个条件的SQL CASE?
- 在Postgres STRING_AGG中对条件数据进行排序
- mybatis中mysql多条件查询
- java中sql查询条件为中文时,rs.next为false,查询不到结果的解决办
- mysql更新触发器先插入另一张表然后删除该条数据
- 条件SQL选择-当返回集为空时,执行另一个选择?
- 条件复杂的sql语句查询