Java Mysql:在父表中事务成功后更新存档表

Java Mysql:在父表中事务成功后更新存档表,java,mysql,spring-boot,Java,Mysql,Spring Boot,在我的JavaSpringBoot项目中,为MySQL数据库中每个与客户相关的表创建了一个归档表。在每次成功的插入或更新事务中,我都必须在存档表中创建一条新记录,并在其父表中更新相同的值 例如: 有一个名为table_1的表和一个名为table_1_arch的存档表。因此,如果在表_1中插入了一条记录,那么表_1_arch也应该用插入表_1中具有相同值的新记录进行更新。类似地,如果表_1中更新了任何记录,则表_1_arch应再次使用与表_1中更新的记录具有相同值的新记录进行更新 注意:-所有存档

在我的JavaSpringBoot项目中,为MySQL数据库中每个与客户相关的表创建了一个归档表。在每次成功的插入或更新事务中,我都必须在存档表中创建一条新记录,并在其父表中更新相同的值

例如: 有一个名为table_1的表和一个名为table_1_arch的存档表。因此,如果在表_1中插入了一条记录,那么表_1_arch也应该用插入表_1中具有相同值的新记录进行更新。类似地,如果表_1中更新了任何记录,则表_1_arch应再次使用与表_1中更新的记录具有相同值的新记录进行更新

注意:-所有存档表都有来自其父表的具有相同数据类型的所有列,以及两个额外的列,如table_arch_id和table_arch_flag。这是客户表及其存档表的架构

表1:

COLUMN_NAME     COLUMN_TYPE   IS_NULLABLE   COLUMN_KEY   COLUMN_DEFAULT                       
----------      ------------   -----------   ----------   --------------  
table_1_id      smallint(6)     NO              PRI            (null)                
column_2        varchar(100)    YES                            (null)                                         
表1:

COLUMN_NAME        COLUMN_TYPE   IS_NULLABLE   COLUMN_KEY   COLUMN_DEFAULT                       
----------         ------------  -----------   ----------   -------------  
table_1_arch_id    smallint(6)     NO              PRI            (null)       
table_1_id         smallint(6)     YES                            (null)                         
column_3           varchar(100)    YES                            (null)                                         
table_1_arch_flag  varchar(1)      YES                            A                                         

我建议您在数据库级别执行此操作,以便在使用spring boot或其他任何工具时可以实现此目的。
方法是在mysql中创建
触发器
,请查看官方文档

编辑

对于阅读本文的任何人,请不要使用触发器,并检查@mentalurg first对该答案的评论

1)使用Enverse。请参见此处的详细信息:。然后你可以从盒子里得到很多功能


2) 或者,您可以使用@PrePersist、@PreUpdate、@PreRemove并实现所需的逻辑。

也许可以了解复制和/或分区复制或分区不是我想做的,我已经阅读了一些与archieve table相关的文章,大多数这些文章都是关于根据特定日期复制大量数据的,但我想要的是在每次成功复制之后进行复制transaction@Madhur,我已经编辑了这个问题,现在已经很清楚了。在网上读了这么多的文章后,我想出了一个程序,可以完成我想完成的任务。如果取消保留,我可以发布答案。使用触发器,你没有透明度,你几乎无法调试它。当您将应用程序部署到某个新环境时,您应该确保已创建触发器。当您更改表结构时,应该每次创建SQL/DDL以确保它与您的表相对应。这不是不可能的,但要付出更多的努力,更容易出错。感谢穆罕默德为您提供宝贵的时间,但在数据库级别这样做不会提供太多的控制,我甚至可能无法实现我的目标want@mentallurg说得好。