mySQL中触发器使用回滚操作出错

sonic youth 2018-05-24 08:48:52
简直绝望了,有大神有解决的思路吗?谢谢!!
mysql> create trigger P_Ins after insert on P
-> for each row
-> begin
-> if new.weight<0 then
-> rollback;
-> end if;
-> end //
ERROR 1422 (HY000): Explicit or implicit commit is not allowed in stored function or trigger.
...全文
2481 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocongzhi 2018-05-26
  • 打赏
  • 举报
回复
无法像SQL Server那样使用rollback
OwenZeng_DBA 2018-05-25
  • 打赏
  • 举报
回复
@momoko桃酱 MySQL 的话,尽量吧逻辑在程序里面去实现。
吉普赛的歌 2018-05-25
  • 打赏
  • 举报
回复
曲线救国也是可以的, 人为制造一点异常就好了:
drop table if EXISTS test;
create table test(
    id int not null primary key,
		weight int not null
);
DELIMITER $
drop trigger if exists tri_test_U
$
create trigger tri_test_U after insert
on test for each row
begin
	declare v int;
	if new.weight<0 then
	    set v = 1/0;
	end if;
end$
DELIMITER ;

insert into test values(1,2);
insert into test values(2,-1);

select * from test;


吉普赛的歌 2018-05-25
  • 打赏
  • 举报
回复 1
my sql 在触发器中不能有commit;rollback;这种事务语句, 而且 check 约束也无法真正起到作用。 比起 SQL Server 来功能性方面差了些。 最好在前端网页做控制吧, 不合格的根本就不会发生。
shoppo0505 2018-05-25
  • 打赏
  • 举报
回复
MySQL 有 before或者instead of么? 在insert之前先判断数据是否符合逻辑

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧