【问题标题】:Mysql - Table lock errorMysql - 表锁错误
【发布时间】:2023-03-20 03:28:01
【问题描述】:

我遇到了一些表锁定问题。我在事务中锁定了一定数量的表。 LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ,t5 READ,t6 READ,t7 READ;

虽然读取它没问题,但是当我尝试写入/更新此表时,它显示错误 Table 't1' is locked with a READ lock and can't be updated

但我从未锁定表进行写入,我必须使用更新的值写入这些表。

我的目标是我需要选择并且我需要更新行,而其他人不应该在过程完成之前与上面的表格进行交互。

非常感谢您的解决方案!

【问题讨论】:

标签: mysql error-handling table-lock


【解决方案1】:

来自mysql doc

锁获取规则 要在当前会话中获取表锁,请使用 LOCK TABLES 语句。可用的锁类型如下:

读取 [本地] 锁:

持有锁的会话可以读表(但不能写)。

【讨论】:

    【解决方案2】:
    MariaDB [test]> lock table super1 read;
    Query OK, 0 rows affected (0.00 sec)
    
    
    MariaDB [test]> select * from super1;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    |  5 |
    |  6 |
    |  7 |
    +----+
    6 rows in set (0.00 sec)
    
    MariaDB [test]> insert into super1 VALUE(10);
    ERROR 1099 (HY000): Table 'super1' was locked with a READ lock and can't be updted
    

    其他会话也可以选择

    MariaDB [test]> unlock tables;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [test]> lock table super1 write;
    Query OK, 0 rows affected (0.00 sec)
    

    其他会话无法选择

    MariaDB [test]> insert into super1 VALUE(10);
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [test]> insert into super1 VALUE(11);
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [test]> unlock tables;
    Query OK, 0 rows affected (0.00 sec)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2016-10-24
      • 2017-12-26
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多