我有一个要求,其中表格保存某些事物的状态。 此表被截断,每秒插入新的状态数据。 问题是如果在删除和下面的插入之间执行选择查询,则用户将获得空表。 SQL Transactions在这里没有帮助我想但不确定。 此外,如果在删除和插入查询之间执行select查询,则它不应该返回错误,因为它被数据库锁定阻止。它应该等到delete + insert操作完成。
实施此类系统的最佳方式是什么? 我应该如何形成"删除+插入"查询和"选择"查询?
提前谢谢。
--------其他信息 此表将是多次重度查询的结果,并且将每秒更新一次,以便应用程序不会运行那些繁重的查询,而是从这个表中获取所需的信息。 所以截断并随机插入每一秒和多个选择。
答案 0 :(得分:1)
不要截断表格。而是使用标识主键或日期作为主键插入新状态。然后做:
select top 1 date
from table
order by date desc
或
select max(date)
from table
(这些应该具有基本相同的执行计划。)
然后,您插入新日期。插入完成后,数据立即可用。
然后,您可以随意删除旧行。
答案 1 :(得分:0)
根据您的描述,此表始终只包含一行,即最后一次状态更改。内容每秒钟都在变化,显然是每天24小时。
不是用截断/插入操作对更改数据,为什么不只更新一行?一次操作,没有竞争条件,根本没有锁定冲突。
甚至可以在不更改任何现有代码的情况下执行此操作:
然后,当执行插入时,不再需要截断,并且插入转换为更新(或合并)。一个操作。