解决方案 »

  1.   

    MySQL thread id 822, OS thread handle 0x3878, query id 369993677 localhost 127.0.0.1 root updating
    UPDATE  T00_StringDisplayed SET CurrentOut = 0.00, VoltOut = 312.00, PowerOut = 0.00, Updated = NOW() WHERE String_ID = 756;MySQL thread id 824,的sql为:UPDATE  T00_StringDisplayed SET StatusCode = 0, CodeArray = '', Updated = NOW() WHERE String_ID = 800;应该是两个数据在同一个索引块上面,所以被锁住了,两个都是X锁。
    看到2个sql在同一个事务( trx id 708)里面。表面上看,无从下手,这2条update的sql语句都蛮简单的。楼主你提到的那个复杂的sql也在这个事务里面吗?贴出来,看看。
      

  2.   

    楼上好。
    那个复杂的select sql在事务2里面,做完select, 然后去update. 事务2存在两次更新同一条数据的sql.
     项目用了ibatis, 来管理事务。 另,您提到的索引块,是什么概念? update的时候,innodb是锁行,还是锁 索引块。另,据我的理解,没有S锁的时候,应该不会产生deadlock. 不知对否请赐教----------------------------------------------------------------------------------------------------------------------------------------------------------
    SELECT M.ID, M.PowerStation_ID, IFNULL(T1.CodeArray, '') AS CodeArray, IFNULL(T1.CurrentOut < (T2.AvgCurrentOut * (SELECT ParamterValue FROM M_Paramters WHERE PowerStation_ID = M.PowerStation_ID AND ParamterName = 'StringStandarCurrentOutLevel2')), 0) AS Level2, IFNULL(T1.CurrentOut < (T2.AvgCurrentOut * (SELECT ParamterValue FROM M_Paramters WHERE PowerStation_ID = M.PowerStation_ID AND ParamterName = 'StringStandarCurrentOutLevel1')), 0) AS Level1, '1000' AS Level1Code,  '1001' AS Level2Code
    FROM M_String AS M
    LEFT JOIN T00_StringDisplayed AS T1
    ON M.ID = T1.String_ID
    LEFT JOIN (SELECT M.Case_ID, AVG(T.CurrentOut) AS AvgCurrentOut FROM T00_StringDisplayed AS T, M_String AS M WHERE T.String_ID = M.ID GROUP BY M.Case_ID) AS T2
    ON M.Case_ID = T2.Case_ID
    WHERE M.StringStatus = '正常' AND M.PowerStation_ID IN (#PowerStationList#);
      

  3.   

    另,您提到的索引块,是什么概念? update的时候,innodb是锁行,还是锁 索引块。
    回答:通过索引块来锁定行记录。
      

  4.   


    打算每个update语句后面,都加个commit; 
    不知道能不能解决
      

  5.   


    打算每个update语句后面,都加个commit; 
    不知道能不能解决可以试试看,不够不建议这样做。另外 : 那个复杂的select sql在事务2里面,做完select, 然后去update. 事务2存在两次更新同一条数据的sql.
     项目用了ibatis, 来管理事务。2个sql可以不可以合并成一个sql来操作?