【问题标题】:mySQL - Apply a row level lock using mysqlimySQL - 使用 mysqli 应用行级锁
【发布时间】:2010-12-16 07:30:39
【问题描述】:

使用 PHP 的 mysqli 如何应用行级锁?

行级锁定会阻止任何人编辑当前存在的符合您条件的行,对吗?但他们会阻止用户插入符合您条件的行吗?

谢谢

【问题讨论】:

    标签: php mysql locking innodb


    【解决方案1】:

    如果您想锁定特定行不进行编辑,请在 SELECT 查询末尾使用 FOR UPDATE。这会锁定事务中的行并阻止其他用户更新它。这仅适用于像 innodb 这样的事务性存储引擎。

    在回答您的问题时,是的,行级锁定“阻止任何人编辑当前存在的符合您的条件的行”。更具体地说,如果(在事务中)您插入、更新或删除一行,则在您提交事务之前,该行将被其他任何人锁定,无法编辑。如果您使用FOR UPDATE 选择一行,那么这也会锁定该行。

    但是,这不会“阻止用户插入符合您的条件的行”。

    【讨论】:

    • 需要强调的是,行级锁定仅在 InnoDB 中可用,在 MyISAM 中不可用。
    • 啊,刚刚看到innodb这个标签了:)
    • 如果行被锁定是否可以从该行中选择数据?例如,如果行被锁定,那么我可以通过fetch_object() 获取数据吗?
    【解决方案2】:

    你想要达到什么目的? InnoDB 引擎使用row level locking,但这是一个自动的内部 MySQL 进程。

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2015-08-04
      • 2016-12-13
      • 1970-01-01
      相关资源
      最近更新 更多