我需要暂时保护表的自定义行不被其他用户编辑。
例如,当我插入具有此功能的行时:tid = 51
;不应该让任何人同时插入行,或者至少有一行tid = 51
。
我怎么能这样做?
答案 0 :(得分:0)
通常, id 仅在插入数据库时分配给一行。在此之前它不存在。在它之后,它已经插入,并且没有其他人能够插入具有相同 id 的另一行(假设它是唯一的索引列)。
所以,你的例子似乎无效。无论如何,如果我们忽略这个例子并考虑开头语这个问题仍然有意义:“我需要暂时保护表的自定义行不被其他用户编辑。”
在这种情况下,您需要存储正在编辑的ID的值以及由哪个用户存储的值。然后,您需要检查此数据以允许/禁止编辑操作。
事实上,由于Web / HTTP应用程序的无状态特性,这里的主要问题是UNLOCK阶段。如果该行在编辑或某种超时后未正确解锁,则会永久锁定(而不是暂时)。
答案 1 :(得分:0)
您想要的是数据库所针对的所有内容。我想要一个唯一的主键,使用自动增量字段。如果要强制使用唯一字段值,请使用字段约束,可能是唯一字段或字段的唯一组合。
不要锁定表,行或数据库,几乎任何情况下这都是糟糕的设计!
答案 2 :(得分:0)
只需将列(tid)定义为MYSQL中的AUTO_INCREMENT字段(或任何其他DBMS,此功能几乎无处不在)。您不必管理锁定,数据库将为您完成。
如果在数据库中插入行之前需要此字段的值(实际上并不总是一个好的设计),则应使用随机生成的UUID。因此,通过最小化具有两个相同值的概率来避免碰撞。