关于mysql触发器中不满足条件回滚问题

 最近在网上看到个关于在mysql触发器里面回滚不满足条件数据回滚的问题,我是弄Oracle数据库的,感觉在mysql中应该

实现起来没什么问题,所以亲测了,建了两张表,先写了个可以实现的触发器,就是下面的insert方法,经测试是OK的,将

 insert注释,改成回滚,然后发现完全编译不通过!!!所以经测试是不能回滚的,毕竟曾经用mysql数据库,不小心删除

了整张表数据,怎么也无法回滚还原。但是在触发器里是可以写出类似回滚操作的办法的(大神想的,我只是网上看到而已)

解决方法如下:将①中的BEFORE改成AFFTER,再在不满足条件回滚的判断条件执行里面,写个delete TABLE_NAME where

ID = OLD.ID;完成了,不过这种方法其实只对有唯一标识符的表结构有效,比如没了ID你又没有可以判断数据唯一性的字段,这

种方法就行不通了。

 

CREATE TRIGGER BASE_TEXT_TRIGGER
         BEFORE insert ON BASE_TEXT      -- ①
FOR each row

BEGIN
		DECLARE P_CNT INT;
			
	  select count(*) into P_CNT
			from SYS_USER 
		 where USER_CODE = NEW.USER_CODE
			 and USER_CODE != 'LLF' ;
	
		#不满足条件回滚
    if (P_CNT <= 0) then
	            -- insert into SYS_USER(ID,USER_CODE,USER_NAME) VALUES(unix_timestamp(now()),'12345','uuUUUUUUU');     # 可以实现
              rollback tran;																																												 # 完全无法完成编译通过
		end if;

END


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值