假设我有父表: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
答案 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;
强>