0

可能重复:
如何将 MySQL 行设置为只读?

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

4

3 回答 3

0

只需将列 (tid) 定义为 MYSQL(或任何其他 DBMS,几乎所有地方都支持此功能)中的 AUTO_INCREMENT 字段。您不必照看锁定,数据库会为您完成。

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

于 2012-09-16T14:34:07.260 回答
0

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

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

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

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

于 2012-09-16T14:17:56.370 回答
0

您想要的与数据库设计的一切相吻合。我想要一个唯一的主键,使用自动增量字段。如果要强制使用唯一字段值,请使用字段约束,可能是唯一字段或唯一字段组合。

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

于 2012-09-16T14:20:13.920 回答