用特殊值锁定行?

时间:2012-09-16 14:02:49

标签: php mysql

  

可能重复:
  How to set a MySQL row to READ-ONLY?

我需要暂时保护表的自定义行不被其他用户编辑。 例如,当我插入具有此功能的行时:tid = 51;不应该让任何人同时插入行,或者至少有一行tid = 51。 我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

通常, id 仅在插入数据库时​​分配给一行。在此之前它不存在。在它之后,它已经插入,并且没有其他人能够插入具有相同 id 的另一行(假设它是唯一的索引列)。

所以,你的例子似乎无效。无论如何,如果我们忽略这个例子并考虑开头语这个问题仍然有意义:“我需要暂时保护表的自定义行不被其他用户编辑。

在这种情况下,您需要存储正在编辑的ID的值以及由哪个用户存储的值。然后,您需要检查此数据以允许/禁止编辑操作。

事实上,由于Web / HTTP应用程序的无状态特性,这里的主要问题是UNLOCK阶段。如果该行在编辑或某种超时后未正确解锁,则会永久锁定(而不是暂时)。

答案 1 :(得分:0)

您想要的是数据库所针对的所有内容。我想要一个唯一的主键,使用自动增量字段。如果要强制使用唯一字段值,请使用字段约束,可能是唯一字段或字段的唯一组合。

不要锁定表,行或数据库,几乎任何情况下这都是糟糕的设计!

答案 2 :(得分:0)

只需将列(tid)定义为MYSQL中的AUTO_INCREMENT字段(或任何其他DBMS,此功能几乎无处不在)。您不必管理锁定,数据库将为您完成。

如果在数据库中插入行之前需要此字段的值(实际上并不总是一个好的设计),则应使用随机生成的UUID。因此,通过最小化具有两个相同值的概率来避免碰撞。