每当我更新我的表时,我想将旧数据(旧行)存储在新表中

时间:2014-05-10 07:38:52

标签: mysql sql

CREATE TRIGGER items_
ON test 
after update
AS
begin
    INSERT INTO test2(id,namecan)
    SELECT id,namecan from test
end

我尝试过触发器,但我没有得到任何结果,所以请帮助我如何处理它 也欢迎涉及两个存储过程的方法

4 个答案:

答案 0 :(得分:0)

您可以使用存储过程执行此操作,但我会使用触发器。

使用存储过程,我会感觉到您使用otherDatabase表上的游标来读取记录并将每个记录与Table1中的值进行比较,以确定Table1的数据是否需要写入Table2,如果需要,则将其写入做到这一点。

使用触发器,我只需通过任何方式更新Table1中的数据,而无需考虑覆盖数据和触发器中的内容,

使用## Inserted&amp ;;使用旧值和新值。 ##删除(系统)表以确定是否需要将旧值(## Deleted)写入Table2。

答案 1 :(得分:0)

您的触发器语法错误

delimiter //
CREATE TRIGGER items_ after update
ON test 
for each row 
begin
    INSERT INTO test2(id,namecan) values (old.id,old.namecan);
end; //
delimiter ;

因此,每当您使用测试表中的旧行值更新测试表中的行时,此触发器将进入test2表。

答案 2 :(得分:0)

如果你不想使用触发器,你可以选择这个概念。
假设有一个表格,您可以在表格中插入值 register 表格。并且表单的操作转到servlet MyServlet 。在 Myservlet 中 您可以先从寄存器表中获取数据,然后将其存储到 Rsultset 对象中,让 rs 。然后将 rs 插入新表中 如果我不清楚,请告诉我。

答案 3 :(得分:0)

你应该调用old.id和old.namecan(我假设表'test'有'id'和'namecan'字段)来获取旧数据。你的触发器主体应该是这样的

begin
    INSERT INTO test2(id,namecan) value(old.id, old.namecan)
end

'old'将引用您更新的记录。