mysql 防止两个用户编辑相同的数据

0vvn1miw  于 12个月前  发布在  Mysql
关注(0)|答案(5)|浏览(161)

我在不同的Web应用程序中看到过一个功能,包括Wordpress(不确定?),如果用户从数据库中打开一篇文章/文章/页面/任何东西,当其他人同时编辑相同的数据时,它会警告用户。
我想在我自己的应用程序中实现相同的功能,我对此进行了一些思考。下面的示例是否是一个很好的实践?
它是这样的:
1)User A进入神秘文章X的编辑页面。查询数据库表Events,以确保目前没有其他人正在编辑同一页面。然后随机生成一个令牌,并将其插入到名为Events的数据库表中。
1)User B还希望对文章X进行更新。现在,由于我们的User A已经在编辑文章,Events表被查询,看起来像这样:

|   timestamp   |   owner   |   Origin      |   token      |
------------------------------------------------------------
|   1273226321  |   User A  |   article-x   | uniqueid##   |

字符串
2)正在检查时间戳。如果时间戳有效并且小于100秒,则会出现一条消息,用户无法对请求的文章X进行任何更改:

Warning: User A is currently working with this article. In the meantime, editing cannot be done. Please do something else with your life.


3)如果用户A决定继续并保存他的更改,则标记将与所有其他数据一起沿着提交以更新数据库,并切换查询以删除标记为uniqueid##的行。如果他决定执行其他操作而不是提交更改,则User B的文章X在100秒内仍可用于编辑
让我知道你对这种方法的看法!
祝大家周末愉快!

kq0g1dla

kq0g1dla1#

是的,这是伟大的,应该工作正常。
此外,我还想增加用户B打破锁的可能性--如果需要的话!
也就是说,用B的锁替换A的锁的可能性。这样,你可以避免时间限制,他们会看到“嘿,这是由A编辑的,这个锁是XXX秒/分钟前的。你想打破这个锁吗?”。
对于好的用户(即没有恶意管理员),这种方法可能比只有100秒的时间来编辑东西更好-有时你只是需要更多的时间。

nkkqxpd9

nkkqxpd92#

如果你想反规范化它并删除额外的Events表,只需要在Articles表中添加一个UserIdTimestamp字段,因为这就是你真正需要的。
您可以轻松检查UserId是否不匹配,以及Timestamp是否小于100秒,然后显示消息。
这样,您就不必在单独的表上执行任何删除操作。

x759pob2

x759pob23#

我只想补充一点,如果页面上做了一些更新时间戳的事情,那么你可以每隔一分钟左右就触发一个AJAX查询。

2lpgd968

2lpgd9684#

编辑一篇文章的时间总是少于100秒吗?

zaqlnxep

zaqlnxep5#

我创建了另一种方法,(正在编辑),假设用户(A)想要编辑文章X,那么当他按下(编辑)按钮时,(is editing)=True,当他完成编辑时,(正在编辑)=假,所以当用户(B)按下编辑按钮编辑同一篇文章(X)时,您应该检查是否(正在编辑)真或假,如果是真的话(消息弹出,文章正在编辑中(用户X)。我认为这将是一个完美的方法。

相关问题