MySQL更新锁(for update)摘要 (987 views)

不耳

2017-03-31 12:12:52

更新锁:for update

  • 在事务中加更新锁后,该事务以外的加更新锁查询无法执行,但不影响普通查询。
    // 进程1
    begin;
    select * from t where id = 1 for update;

    现在开启另一个进程

    // 进程2
    select * from t where id = 1 for update; // 此查询会等待进程1提交,或进程关闭后才执行。
    select * from t where id = 1; // 此查询不会等待,直接执行。

    再开启一个进程

    // 进程3
    begin;
    select * from t where id = 1 for update; // 此查询会等待进程1提交,或进程关闭后才执行。
    select * from t where id = 1; // 此查询不会等待,直接执行。

事务不能嵌套

  • 在事务中开启另一个事务,会提交前一个事务。
  • Laravel中可以使用 DB::transaction() 嵌套。框架中实际只会执行一次事务。