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 展开
触发器
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 展开
2个回答
展开全部
你这个问题的主要原因, 是 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.其他字段 ...);
(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.其他字段 ...);
展开全部
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;
然后再试试插入一次,这样这两张表应该是完全匹配上了
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;
然后再试试插入一次,这样这两张表应该是完全匹配上了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询