【发布时间】:2012-09-16 14:02:48
【问题描述】:
我需要临时保护表格的自定义行不被其他用户编辑。
例如,当我插入具有此功能的行时:tid = 51;不应该让任何人同时插入一行,或者至少一行带有tid = 51。
我该怎么做?
【问题讨论】:
我需要临时保护表格的自定义行不被其他用户编辑。
例如,当我插入具有此功能的行时:tid = 51;不应该让任何人同时插入一行,或者至少一行带有tid = 51。
我该怎么做?
【问题讨论】:
通常,id 仅在插入数据库时才分配给行。在这一刻之前它是不存在的。在它之后,它已经被插入,其他人将无法插入具有相同 id 的另一行(假设它是唯一索引的列)。
因此,您的示例似乎无效。无论如何,如果我们忽略这个例子并考虑开头的短语,这个问题仍然是有意义的:“我需要临时保护表格的自定义行不被其他用户编辑。”
在这种情况下,您需要将正在编辑的 ID 的值以及由哪个用户存储在某处。然后,您需要检查此数据以允许/禁止编辑操作。
事实上,由于 web/HTTP 应用程序的无状态特性,这里的主要问题是 UNLOCK 阶段。如果该行在其编辑或某种超时后未正确解锁,它将被永久锁定(而不是暂时锁定)。
【讨论】:
您想要的与数据库的设计目的完全一致。我想要一个唯一的主键,使用自动增量字段。如果您想强制使用唯一字段值,请使用字段约束,可能是唯一字段或唯一字段组合。
不要锁定表、行或数据库,在任何情况下,这都是糟糕的设计!
【讨论】:
只需在 MYSQL(或任何其他 DBMS,几乎所有地方都支持此功能)中将列 (tid) 定义为 AUTO_INCREMENT 字段。您不必照看锁定,数据库会为您完成。
如果您在向数据库中插入一行之前需要此字段的值(这实际上并不总是一个好的设计),您应该使用随机生成的 UUID。从而通过最小化具有两个相同值的概率来避免冲突。
【讨论】: