在提交后根据时间戳禁用内部时间间隔内的触发器

时间:2016-08-22 15:20:37

标签: php mysql

我在这里有一个有趣的问题,有人可以帮助我。我有一个大多数整数的表/表格,偶尔会更新每一个新的数字。触发器将所有旧数字传递到完全相同设计的第二个表格,因为旧数字对于保持一段时间非常重要。触发器如下所示:

begin

if NEW.(rowname)<>OLD.(rowname) then
update table2 
set table2.rowname = OLD.rowname
where table2.id = OLD.ID;
end if;
 ...
end

这段代码适用于100多个Integer类型的行。 现在,被委托手动插入新号码的人容易犯错误,并且回到更新表格来改变他们的错误将不可避免地将错误的数字传递到第二个表格(实际上有5个表格要保留5代数组)。所以我认为可能有一种方法可以在表中包含一个时间戳字段,并使用一个初始的“IF / THEN”语句禁用触发器,该语句包含时间戳以在SUBMIT之后创建一个时间间隔,以便在不进行更正的情况下进行更正触发器实际触发。这可能吗?

1 个答案:

答案 0 :(得分:0)

我会出于好奇心调查@drew,但我的结论/解决方案将涉及触发器定义中语义的轻微更改。行是4位数的临时值,触发器将简单地定义为当所有新读数与旧的读数不同时将旧的传递到下一个表,依此类推。 &#34; IF&#34;和&#34;结束IF&#34;语句将包含引用所有行的所有语句。因此,如果旧的行数是2500,则新的将简单地输入为2501,并且轻微的偏移落在采用临时读数的仪器的误差范围内。这样,任何更改都可以在主表上进行,除非它是完全更改,而不会影响存档表。一个实用的,不优雅的解决方案,因为它忽略了SQL语言的复杂性和欣赏,我开始时并不熟悉它。 我很幸运,因为这里允许有误差。感谢你们两位的投入......

新触发器:

begin
if
NEW.row1<>OLD.row1 then
update table2
set table2.row1 = OLD.row1
where table.id = OLD.ID;
and
(if?) NEW.row2<>OLD.row2 then
update table2
set table2.row2 = OLD.row2
where table2.id = OLD.ID;
.....
end if;
end

我希望在语义上答案是有效的,如果不是我会弄清楚细节,直到它确实......但你明白了。