数据库删除旧条目

时间:2014-11-20 22:03:26

标签: mysql sql sql-server database

我的问题更多的是一个高级问题,而不是特定于技术。

我遇到的问题是我在数据库中插入了与机器对应的用户列表。当我这样做时,我不知道用户以前是什么,但我想删除数据库中与该计算机对应但不再是当前用户的用户。

我拥有的列表是该计算机的当前用户列表。有什么想法吗?

解决方案1:

  1. 查询数据库以获取与计算机对应的用户列表。
  2. 与当前列表进行比较,并构建删除列表和添加列表。
  3. 执行删除
  4. 执行添加
  5. 这个解决方案的缺点是我们执行3个存储过程语句。 积极的是我们不必更改数据库。

    解决方案2:

    1. 向表中添加用户时间戳字段。
    2. 在更新时间戳字段时运行添加所有用户。
    3. 执行新的存储过程以删除所有对应的用户 更新的机器比现在少。
    4. 缺点是我们在每一行添加一个字段 积极的是这可能只有2个查询。

2 个答案:

答案 0 :(得分:1)

从我的角度来看,最简单的解决方案是更改表,以便添加默认为当前时间的日期时间或时间戳,以及当前时间的更新更新。这样,当表被更改时,就会发生此更新。然后构建一个工作来运行每个X周期(每天,每周,每月等),以删除在某段时间内未更新的用户。

这使您可以最大程度地控制数据库,并在短时间内获得最准确的数据。

答案 1 :(得分:1)

保持简单。为什么不:

-- Add any new machines
INSERT [Table] (MACHINE, [USER]) 
SELECT MACHINE, [USER] FROM Query Q WHERE NOT EXISTS(SELECT * FROM [Table] T WHERE T.MACHINE = Q.MACHINE)

-- Delete any removed machines
DELETE [Table] WHERE Machine NOT IN (SELECT Machine FROM Query)

-- Update any changed machines
UPDATE
  A
SET
  A.CoName = B.CoName
  --SELECT *
FROM
  Cust A 
  JOIN (SELECT CustID, CoName FROM Cust) B 
    ON A.CustID = B.CustID AND A.CoName <> B.CoName

更新了我的答案,以涵盖新机器和移除机器。将其全部包含在存储过程中。