Php 在客户端编辑时阻止mysql记录

Php 在客户端编辑时阻止mysql记录,php,mysql,Php,Mysql,简介: 1-我不是在寻找代码解决方案 2-我只是要求一种思维方式(算法) 问题描述: 1-我有一个运行在服务器上的mysql数据库 2-多个客户端将使用phpwebapp同时访问数据库 3-如果客户端A在webapp中打开一条记录recordIdX,它将显示在相应的html输入字段中,客户端将有时间在提交表单之前修改这些值 4-可能发生的问题是,当另一个客户端B在客户端A完成更新之前打开相同的recordIdX,对其进行修改,然后更新数据库 问题: 防止这种冲突的最佳方法是什么?我开发的一个We

简介:


1-我不是在寻找代码解决方案

2-我只是要求一种思维方式(算法)

问题描述:

1-我有一个运行在服务器上的
mysql
数据库

2-多个客户端将使用
php
webapp同时访问数据库

3-如果客户端
A
在webapp中打开一条记录
recordIdX
,它将显示在相应的
html输入字段中
,客户端将有时间在提交
表单之前修改这些值

4-可能发生的问题是,当另一个客户端
B
在客户端
A
完成更新之前打开相同的
recordIdX
,对其进行修改,然后
更新数据库

问题:


防止这种冲突的最佳方法是什么?

我开发的一个Web应用程序也有类似的要求。我就是这样做的:

应该是“可锁定”的表有一个
accessId
accessId
access
表的外键,该表有一些相关列,例如:isLocked、isLockedByUserId、lastModificationDate


这可能也很有趣:

不管你选择什么,你都需要仔细考虑:如果客户端<代码> A<代码>打开了记录,但是从来没有编辑/关闭它吗?“我不是在寻找一个代码解决方案。”它们为什么包括了标签PHP?我会考虑像散列记录并把它放在一个隐藏的字段中。然后在保存时,检查记录是否仍然具有相同的哈希值。如果没有,则其他人编辑了它,您需要进行一些冲突解决。“防止此冲突的最佳方法是什么?”->使用InnoDB作为表引擎,并将其包括在[table]中的select
select*中进行更新,其中。。。。对于更新
这种方式,记录只能由第一个使用更新
打开记录的客户更新。这种类型的问题太广泛,可能基于观点。我会在DB exchange上发布这篇文章-你会在那里得到更好的响应。仍然容易受到比赛条件的影响。。如果两个客户端同时请求同一条记录,而数据库没有时间在一段时间内更新可锁定记录,该怎么办。@RaymondNijland悲观锁定将阻止竞争条件1或2个附加字段(锁guid、时间戳)可以代替另一个表使用,否则这是唯一的解决方案<更新的代码>必须用于保证原子锁定。@Vatev,实际上我只使用了一个字段
isopen
。。我不需要更多的信息。。。如果设置为0,则将其设置为1并打开记录。。。否则,回显已在使用的字段…@mlwn如何判断哪个客户端拥有锁以及谁必须等待?您还需要一个时间戳和一个锁超时。否则,在网络故障、崩溃等情况下,记录可能(并且将)永久锁定。