如何移动父母和母亲子表将数据存档到表(具有相同的列)

时间:2017-07-18 11:56:33

标签: java mysql sql-server oracle hsqldb

假设我有父表:Transaction_Logger

--------------------------------------------
Id     | Txn_Name   | Txn_Status  | Txn_Time
--------------------------------------------
101    | C2C        | Executed    | 11-july-17
--------------------------------------------
201    | B2B        | Aborted     | 11-July-17
--------------------------------------------
301    | B2C        | Executed    | 12-July-17

子表:Transaction_Error(Txn_Id是带有Transaction_Logger表ID列的外键)

 ------------------------------------
    Id     | Error_msg     | Txn_Id 
 ------------------------------------
    410    | some error msg| 201   
 ------------------------------------ 

我还有另外两个具有相同结构的表Transaction_Logger_Archive&分别是Transaction_Error_Archive。

我们需要将主表数据存档到存档表。是否有任何预先定义的方法,如果我们将父表(Transaction_Logger)数据移动到其归档表(Transaction_Logger_Archive),那么子表(Transaction_Error)数据会自动归档到其归档表(Transaction_Error_Archive)? 例如:我们有deleteOnCascade删除父表记录时删除子表记录。

我需要在数据库服务器上支持以上行为:MySql,SqlServer,Oracle& HSQL

1 个答案:

答案 0 :(得分:0)

您可以使用MySQL Event Scheduler。这是MySQL中内置的事件调度程序。

您可以指定它以指定的时间间隔调用过程。

阅读MySQL文档,但一个例子是:

CREATE EVENT yourdatabase.eventname
ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
 CALL YOURPROCEDURE();

在YOURPROCEDURE中,您可以编写逻辑来存档多个表格。

DELIMITER $

CREATE PROCEDURE YOURPROCEDURE()
BEGIN
BEGIN TRANSACTION;

DECLARE CURRENT_DATE_VAR DATETIME;
/*
Your stuff
*/
END$

DELIMITER ;

默认情况下,事件调度程序在MySQL中禁用。你可以在运行时打开它:

<强> SET GLOBAL event_scheduler = ON;