2009-09-15 3 views
1

내 웹 서버에서 asp.net과 함께 mysql을 사용하고 있습니다. 나는 또한 sqlite 데이터베이스를 사용하여 다른 장치에서 데이터베이스를 사용할 수 있습니다. 두 데이터베이스간에 데이터를 보내야합니다. 이것은 하루에 여러 번해야 할 일입니다.mysql 오류 : 잠금 대기 시간 초과가

using (MySqlTransaction mysqltransaction = mysqlconn.BeginTransaction()) 
      { 
       using (mysqlcmd) 
       { 
        //Creates parameters 
        MySqlParameter parmitemid = new MySqlParameter("?itemid", MySqlDbType.Int32); 
        mysqlcmd.Parameters.Add(parmitemid); 
    //Creates more parameters, can't show them all... 

        //For each row in the sqlite table, do the insert 
        while (reader.Read()) 
        { 
         //Sets the parameters, can't show them all 
         parmitemid.Value = reader.GetInt(1); 
    mysqlcmd.CommandText = "INSERT INTO tblitem (itemid,......,customerid) VALUES (?itemid,......,(SELECT customerid FROM tblcustomer WHERE fid=?fid ORDER BY customerid DESC LIMIT 1))"; 
         mysqlcmd.ExecuteNonQuery(); 
        } 
       } 
       mysqltransaction.Commit(); 
      } 

이것은 내가 코멘트에 쓴, 거기에 더 많은 매개 변수입니다하지만 그들은 첫 번째로 모두 동일, 그것을 할 방법입니다 : 이것은 내가 그것을 할 방법의 예입니다. 데이터베이스간에 데이터를 전송할 때 나는이 코드의 20 개의 다른 세트를 코드와 거의 동일하게 처리합니다. 그러나 당신이 이해 하듯이 나는 그들 모두를 보여줄 수는 없습니다.

때로는 삽입해야하는 3000-4000 행이있을 수 있지만 1-50과 같이 작은 경우가 있습니다.

문제는이 오류가 "Lock 대기 제한 시간을 초과했습니다. 트랜잭션을 다시 시작하십시오."라는 오류가 발생하여이를 피할 수 있는지 궁금해합니다.

또한 전체 솔루션이 느리게 보입니다. 각 삽입 쿼리에 대해 subselect를 수행해야합니까?

감사합니다.

답변

1

한 번이 구문을 사용하여 여러 행을 삽입 할 수 있습니다

INSERT INTO table (col1, col2) VALUES ('a', 1), ('b', 2), ('c', 3) 

이 한 번에 세 개의 행을 삽입하고 훨씬 빠른 것입니다.

관련 문제