[MySQL] - 执行错误 #1442_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1957 | 回复: 0   主题: [MySQL] - 执行错误 #1442        下一篇 
justfriend
注册用户
等级:新兵
经验:61
发帖:62
精华:0
注册:2011-11-21
状态:离线
发送短消息息给justfriend 加好友    发送短消息息给justfriend 发消息
发表于: IP:您无权察看 2014-12-17 9:24:14 | [全部帖] [楼主帖] 楼主

+----+------+------+
| Id |  sal |  num |
+----+------+------+
| 13 |  600 |   10 |
| 14 |  200 |   10 |
| 15 |  300 |   10 |
+----+------+------+


写好的MySQL触发器 如下:

CREATE TRIGGER ins_trig before insert ON hello.yy
FOR EACH ROW
BEGIN
update yy set sal=sal+100 where num>10
END;


这个触发器是可以执行成功的 然后我们测试(激活)

insert into yy values(0,2000,11);


理论上按照触发器的定义插入的值应该为16 2100 11 可是令人郁闷的错误出现了:

ERROR 1442 (HY000): Can"t update table "yy" in stored function/trigger because i
t is already used by statement which invoked this stored function/trigger.


网上找遍了所有的解决办法 最后在国外的一个帖子上找到了solution

将触发器定义改成如下:

CREATE TRIGGER ins_trig before insert ON hello.yy
FOR EACH ROW
BEGIN
if new.num>10 then
set new.sal = new.sal + 100;
end if;
END;


然后插入刚才的测试值就ok了

mysql> insert into yy values(0,2000,11);
Query OK, 1 row affected (0.01 sec)
mysql> select * from yy;
+----+------+------+
| Id |  sal |  num |
+----+------+------+
| 13 |  600 |   10 |
| 14 |  200 |   10 |
| 15 |  300 |   10 |
| 16 | 2100 |   11 |
+----+------+------+
5 rows in set (0.00 sec)


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论