让我们说,我有一个表和2个单独的用户同时在同一行输入数据,该表只限制一个记录。
那么sql server如何选择和接受哪些用户编辑?
保护这个的最佳方法是什么?
答案 0 :(得分:3)
为了防止两个用户同时更新记录,您可以在表中找到一个last_updated字段,其中包含您要更新的记录。此字段,每行更新将自动更新为当前时间戳;这样,如果我们选择,第二个用户的更新尝试可能会失效。
例如:
<强>表1:强>
请注意,last_updated字段设置为ON UPDATE CURRENT_TIMESTAMP
+------------------------------------+
| id | some_data | last_updated |
+------------------------------------+
| 1 |"Some text"|2014-06-09 14:00:00|
| 2 | "example" |2014-06-09 15:00:00|
+------------------------------------+
让我们假设我们使用表单作为我们的接口来同时更新两台客户端计算机上的记录1。我们已经完成了一个SELECT语句并使用记录#1中的内容填充表单,如果我们在用户修改数据时采用last_updated时间戳并将其存储在客户端,我们可以构建一个如下所示的查询帮助防止意外覆盖:
UPDATE Table1
SET some_data = '<<your data>>'
WHERE last_updated = '<<stored timestamp>>' AND
id = 1
LIMIT 1;
因此,对于这样的查询,客户端#1将使用正确的时间戳执行此查询,从而导致更新成功。客户端#2现在将尝试更新,但由于last_updated字段已更新,因此时间戳无效。此时,我们可以通知用户他们的更新尝试失败,并说这可能是因为该记录正在使用中,这完全取决于您。
这只是实现你所描述的东西的一种方法,我希望有所帮助。我确信有更好的方法,但这是我现在能想到的最好方法。
祝你好运!