【问题标题】:How can I move parent & child tables data to archive tables (which has same columns)如何将父表和子表数据移动到存档表(具有相同的列)
【发布时间】:2017-12-23 06:46:19
【问题描述】:

假设我有父表: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   
 ------------------------------------ 

我还有另外 2 个分别具有相同结构 Transaction_Logger_Archive 和 Transaction_Error_Archive 的表。

我们需要将主表数据归档到归档表中。如果我们将父表(Transaction_Logger)数据移动到其归档表(Transaction_Logger_Archive)然后子表(Transaction_Error)数据自动将归档到其归档表(Transaction_Error_Archive),是否有任何预定义的方式? 例如:我们有 deleteOnCascade,它在删除父表记录时删除子表记录。

我需要在数据库服务器上支持上述行为:MySql、SqlServer、Oracle 和 Hsql

【问题讨论】:

  • 您是否尝试过在数据库上使用触发器?另外,你为什么在这个问题中使用javatag?

标签: java mysql sql-server oracle hsqldb


【解决方案1】:

您可以使用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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 2016-04-04
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2014-07-07
    相关资源
    最近更新 更多