mysql 触发器 更新时插入另一张表

updatepm_processmapsetaccountId=999whereid=1触发器CREATETRIGGERprocessBEFOREUPDATEONpm_p... update pm_processmap set accountId=999 where id=1

触发器
CREATE TRIGGER process
BEFORE UPDATE
ON pm_processmap
FOR EACH ROW
BEGIN

if(New.accountId!=Old.accountId) THEN
INSERT into pm_processmap_history select * from pm_processmap where id=Old.id;

end IF;
END

大家看写的对吗?怎么更新的时候出错,查了下好像是value个数不匹配,我这两张表一模一样的字段啊,怎么改呢?
这是正确的,贴出来

CREATE TRIGGER process
BEFORE UPDATE
ON pm_processmap
FOR EACH ROW
BEGIN
if(New.accountId!=Old.accountId) THEN
INSERT into pm_processmap_history(pId,accountId,processDefId,processInstanceId,remarks,tableId,tableName,taskState) select id,accountId,processDefId,processInstanceId,remarks,tableId,tableName,taskState from pm_processmap where id=Old.id;
end IF;
END
展开
 我来答
wangzhiqing999
2011-08-22 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3340万
展开全部
你这个问题的主要原因, 是 MySQL 里面, 不允许 触发器里面, 检索自己这个表
(SQL Server 的触发器是可以的, 但是 MySQL 不可以)

你可以把
INSERT into pm_processmap_history select * from pm_processmap where id=Old.id;
修改为
INSERT INTO pm_processmap_history (字段列表)
VALUES( Old.id, Old.其他字段 ...);
zjx102938
2011-08-22 · TA获得超过1038个赞
知道小有建树答主
回答量:396
采纳率:100%
帮助的人:294万
展开全部
mysql的语法规则不是很熟,目前只对Oracle比较熟悉,给你提几点建议
1.先考虑下BEFORE UPDATE改成AFTER UPDATE,我认为插入数据应该在你更新数据之后
2.INSERT into pm_processmap_history values (Old.id……)直接填写所有字段,如果还报错
可能是两张表的字段一样,但是数据类型和约束不一样,导致插入失败。
那么
drop table pm_processmap_history;
create table pm_processmap_history
as
select * from pm_processmap where 1=0;
然后再试试插入一次,这样这两张表应该是完全匹配上了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式