Mysql 删除数据库中的条目而不引用
我们有以下要求: 目前,我们将数据从源(另一台服务器、另一个团队、另一个数据库)获取到一个临时数据库(通过批处理作业),在我们将数据获取到临时数据库后,我们处理数据,根据差异(即更改的记录或新添加的记录)转换和更新主数据库 Source->tempDB(每日重新创建)->delta->primaryDB 要求: -在源中删除主数据库中的数据后,删除主数据库中的数据。 例如:假设在源代码中创建了一个ID=1的记录,它将进入临时数据库并最终进入主数据库。在源中删除此记录时,它也应在主数据库中删除 挑战: 当tempDB中没有可引用的内容时,我们如何从主数据库中删除(因为记录已经在source中删除,tempDB中没有任何内容) 天真的方法:Mysql 删除数据库中的条目而不引用,mysql,sql-server,database,Mysql,Sql Server,Database,我们有以下要求: 目前,我们将数据从源(另一台服务器、另一个团队、另一个数据库)获取到一个临时数据库(通过批处理作业),在我们将数据获取到临时数据库后,我们处理数据,根据差异(即更改的记录或新添加的记录)转换和更新主数据库 Source->tempDB(每日重新创建)->delta->primaryDB 要求: -在源中删除主数据库中的数据后,删除主数据库中的数据。 例如:假设在源代码中创建了一个ID=1的记录,它将进入临时数据库并最终进入主数据库。在源中删除此记录时,它也应在主数据库中删除 挑
-我们可以在每次转换和重新加载之前清理主数据库。但是,每次清理和填充主数据库都需要花费大量的时间。您可以在每个表上创建触发器,用删除的条目填充历史记录表。将其同步到tempDB,并使用它删除主数据库中的内容 您可能希望每个表都有一个“删除历史记录表”,或者需要一个包含触发删除的表名的组合历史记录表 您可能需要查看SQL Compare或其他用于同步表的工具 如果您可以同时访问tempDB和primeDB(同一服务器或链接服务器),也可以尝试
delete *
from primeBD.Tablename
where not exists (
select 1
from tempDB.Tablename where id = primeDB.Tablename.Id
)
这将执行得非常糟糕-请询问数据库设计人员。您可以在每个表上创建触发器,用删除的条目填充历史记录表。将其同步到tempDB,并使用它删除主数据库中的内容 您可能希望每个表都有一个“删除历史记录表”,或者需要一个包含触发删除的表名的组合历史记录表 您可能需要查看SQL Compare或其他用于同步表的工具 如果您可以同时访问tempDB和primeDB(同一服务器或链接服务器),也可以尝试
delete *
from primeBD.Tablename
where not exists (
select 1
from tempDB.Tablename where id = primeDB.Tablename.Id
)
这将执行得非常糟糕-询问数据库设计者。在此场景中,如果TEMPDB和Primary db没有直接引用,则可以在数据库级别使用跟踪事件通知 这是我得到的相同链接:
在此场景中,如果TEMPDB和Primary DB没有直接引用,则可以在数据库级别使用跟踪事件通知 这是我得到的相同链接:
这些表中是否有您要删除的唯一字段?是的,该表有一个主键。为什么要标记MySQL和SQL Server?@learner,问题是什么?例如,您可以使用“从…不存在的地方删除”吗?我建议您从主要方法将第2天记录从临时推送到主要位置。现在,对于主数据库中存在但不在临时数据库中的记录,主数据库
left join
temp db将为空。因此,标记它们/从主目录中删除它们。有意义吗?这些表中是否有要从中删除的唯一字段?是的,该表有一个主键。为什么要标记MySQL和SQL Server?@learner,这就是问题所在?例如,您可以使用“从…不存在的地方删除”吗?我建议您从主要方法将第2天记录从临时推送到主要位置。现在,对于主数据库中存在但不在临时数据库中的记录,主数据库left join
temp db将为空。因此,标记它们/从主目录中删除它们。有道理吗?谢谢。尽管如您所述,此选项速度较慢。谢谢。尽管如您所述,此选项速度较慢。