Java Mysql:在父表中事务成功后更新存档表
在我的JavaSpringBoot项目中,为MySQL数据库中每个与客户相关的表创建了一个归档表。在每次成功的插入或更新事务中,我都必须在存档表中创建一条新记录,并在其父表中更新相同的值 例如: 有一个名为table_1的表和一个名为table_1_arch的存档表。因此,如果在表_1中插入了一条记录,那么表_1_arch也应该用插入表_1中具有相同值的新记录进行更新。类似地,如果表_1中更新了任何记录,则表_1_arch应再次使用与表_1中更新的记录具有相同值的新记录进行更新 注意:-所有存档表都有来自其父表的具有相同数据类型的所有列,以及两个额外的列,如table_arch_id和table_arch_flag。这是客户表及其存档表的架构 表1: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中更新的记录具有相同值的新记录进行更新 注意:-所有存档
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说得好。