我想一次提交很多条DML语句,这些DML 操作的表有的是 重复的。
按说一个事务里不会有 Lock wait,但是为什么会发生
Lock wait timeout exceeded; try restarting transaction求解:

解决方案 »

  1.   

    你在执行批量dml的时候   别的事务阻塞了你这个dml语句
      

  2.   

    一个事务中不会有 WAIT LOCK,但此刻其它连接如果LOCK了你需要的表,那当前事务就只能等别人UNLOCK。 如果过长,则会自动放弃锁的请求,从而整个事务回滚。
      

  3.   

    确实没其他事务。
    只是                 
    mysql> show processlist;
    +----+------+----------------+-----------+---------+-------+-------+-----------
    ------+
    | Id | User | Host           | db        | Command | Time  | State | Info
          |
    +----+------+----------------+-----------+---------+-------+-------+-----------
    ------+
    |  8 | root | localhost:2722 | NULL      | Sleep   |    80 |       | NULL
          |
    |  9 | root | localhost:2723 | webspider | Sleep   |    77 |       | NULL
          |
    | 10 | root | localhost:2724 | webspider | Sleep   | 12345 |       | NULL
          |
    | 11 | root | localhost:3082 | webspider | Sleep   | 16469 |       | NULL
          |
    | 12 | root | localhost:3590 | webspider | Sleep   |   202 |       | NULL
          |
    | 27 | root | localhost:3653 | webspider | Sleep   |   452 |       | NULL
          |
    | 34 | root | localhost:3761 | webspider | Sleep   |   184 |       | NULL
          |
    | 42 | root | localhost:3850 | webspider | Sleep   | 10746 |       | NULL
          |
    | 73 | root | localhost:4465 | webspider | Sleep   | 10437 |       | NULL
          |
    | 74 | root | localhost:4468 | webspider | Sleep   | 10405 |       | NULL
          |
    | 76 | root | localhost:4636 | webspider | Sleep   |  7955 |       | NULL
          |
    | 77 | root | localhost:2692 | webspider | Query   |     0 | NULL  | show proce
    这是 走得不同的端口,还算是在一个事务里吗?