【问题标题】:Mysql table lock instead of row locksMysql 表锁代替行锁
【发布时间】:2013-12-02 05:23:35
【问题描述】:

Mysql (5.5) Innodb 在这种情况下是放置表锁而不是行锁。

这会导致对表的其他插入查询失败。这也是更大交易的一部分。

Insert into table x(x1,x2)
Select y1,y2 from y
where 'big sql case based conditions'

现在选择查询只选择表的一部分(基于哪个用户)而不是整个表。

但是 mysql innodb 正在放表锁。

有什么办法可以避免这种情况吗?任何帮助将不胜感激。

【问题讨论】:

    标签: mysql locking


    【解决方案1】:

    我认为您在 REPEATABLE READ 模式下使用 tx。你能看看这个吗?

    mysql> show session variables like '%isol%';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | tx_isolation  | REPEATABLE-READ |
    +---------------+-----------------+
    

    如果是这样,请将其更改为“READ COMMITTED”,如下所示:

    mysql> set session transaction isolation level read committed;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show session variables like '%isol%';
    +---------------+----------------+
    | Variable_name | Value          |
    +---------------+----------------+
    | tx_isolation  | READ-COMMITTED |
    +---------------+----------------+
    

    然后,客户端A启动INSERT INTO .. SELECT并从客户端B插入一行。我认为客户端B的INSERT会成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      相关资源
      最近更新 更多