mysql错误:超出锁定等待超时

时间:2009-09-15 08:51:33

标签: mysql transactions locking

我在我的网络服务器上使用mysql和asp.net。我还使用sqlite数据库来在另一台设备上使用数据库。我需要在两个数据库之间发送数据。这是需要每天多次完成的事情。这是我如何做的一个例子:

    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。

问题是我不时遇到这个错误“超过锁定等待超时;尝试重新启动事务”并想知道我可以做些什么来避免它?

整个解决方案似乎也很慢。可能是我需要为每个插入查询做一个子选择吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下语法一次插入多行:

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

这将同时插入三行,并且更快。