Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 删除数据库中的条目而不引用_Mysql_Sql Server_Database - Fatal编程技术网

Mysql 删除数据库中的条目而不引用

Mysql 删除数据库中的条目而不引用,mysql,sql-server,database,Mysql,Sql Server,Database,我们有以下要求: 目前,我们将数据从源(另一台服务器、另一个团队、另一个数据库)获取到一个临时数据库(通过批处理作业),在我们将数据获取到临时数据库后,我们处理数据,根据差异(即更改的记录或新添加的记录)转换和更新主数据库 Source->tempDB(每日重新创建)->delta->primaryDB 要求: -在源中删除主数据库中的数据后,删除主数据库中的数据。 例如:假设在源代码中创建了一个ID=1的记录,它将进入临时数据库并最终进入主数据库。在源中删除此记录时,它也应在主数据库中删除 挑

我们有以下要求:

目前,我们将数据从源(另一台服务器、另一个团队、另一个数据库)获取到一个临时数据库(通过批处理作业),在我们将数据获取到临时数据库后,我们处理数据,根据差异(即更改的记录或新添加的记录)转换和更新主数据库

Source->tempDB(每日重新创建)->delta->primaryDB

要求: -在源中删除主数据库中的数据后,删除主数据库中的数据。 例如:假设在源代码中创建了一个ID=1的记录,它将进入临时数据库并最终进入主数据库。在源中删除此记录时,它也应在主数据库中删除

挑战: 当tempDB中没有可引用的内容时,我们如何从主数据库中删除(因为记录已经在source中删除,tempDB中没有任何内容)

天真的方法:
-我们可以在每次转换和重新加载之前清理主数据库。但是,每次清理和填充主数据库都需要花费大量的时间。

您可以在每个表上创建触发器,用删除的条目填充历史记录表。将其同步到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将为空。因此,标记它们/从主目录中删除它们。有道理吗?谢谢。尽管如您所述,此选项速度较慢。谢谢。尽管如您所述,此选项速度较慢。