【问题标题】:Lock the rows with a special value? [duplicate]锁定具有特殊值的行? [复制]
【发布时间】:2012-09-16 14:02:48
【问题描述】:

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-08
          • 2016-08-29
          • 2018-05-09
          • 2019-07-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多