我有一些数据库表,其中包含一些聚合数据。它们的记录(数千个/表)由外部 .NET 应用程序定期重新计算,因此应删除旧数据并定期插入新数据。在这种情况下,更新不是一个选项。
在删除/插入之间有一个中间时间,当记录状态不一致时(旧的被删除,新的不在表中),因此在该状态下进行选择查询会导致不正确的结果。
我使用 subsonic simplerepository 来处理数据库功能。
解决/处理此状态的最佳实践/模式是什么?
最佳答案
我想到了三个选项:
- 创建一个读取锁定的事务,直到它完成。这仅在进程相对较快时才有效。如果您一次处理/锁定一个表,几千条记录应该不会太糟糕——如果您锁定整个过程,那可能会很昂贵!但如果数据是相关的,这就是你必须做的
- 写入表的临时版本,然后删除旧表并重命名临时表。
- 与上面相同,除了从临时表(不一定是 SQL 临时表,但辅助存储表就足够)批量复制到正确的表中,首先从主表中删除。您仍然希望为此使用交易。
关于sql - 从/向数据库删除+插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828600/