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

有如下需求,一张表中有一个字段,用于记录更新该条数据的时间。

表结构如下:

CREATE TABLE temp2
(
id int(11) PRIMARY KEY AUTO_INCREMENT,
name varchar(10),
updated_at timestamp NULL
)


我做了如下尝试。

尝试1,如下:

delimiter |
DROP TRIGGER IF EXISTS tri_temp_updated_at;
CREATE TRIGGER tri_temp_updated_at AFTER UPDATE ON temp2
FOR EACH ROW
BEGIN
UPDATE temp2 t SET t.updated_at=now() WHERE t.id=old.id;
END;
|
delimiter ;


创建完触发器后测试,会出现ERROR 1442 (HY000)错误。详细信息如下:

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


尝试2,如下:

delimiter |
DROP TRIGGER IF EXISTS tri_temp_updated_at;
CREATE TRIGGER tri_temp_updated_at BEFORE UPDATE ON temp2
FOR EACH ROW
BEGIN
DECLARE now_date timestamp;
SET now_date=now();
IF now_date!=old.updated_at
THEN
UPDATE temp2 t SET t.updated_at=now_date WHERE t.id=old.id;
END IF;
END;
|
delimiter ;


创建完触发器后测试,仍然会出现ERROR 1442 (HY000)错误。

尝试3,如下:

DROP TRIGGER tri_temp_updated_at;
delimiter |
DROP TRIGGER IF EXISTS tri_temp_updated_at;
CREATE TRIGGER tri_temp_updated_at BEFORE UPDATE ON temp2
FOR EACH ROW
BEGIN
SET NEW.updated_at = now();
END;
|
delimiter ;


创建完触发器后测试,通过。

该贴被Robin编辑于2014-9-3 14:24:39

该贴由hui.chen转至本版2014-11-5 16:18:25

该贴由hui.chen转至本版2014-11-5 16:22:20




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