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