Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql错误:超过锁定等待超时_Mysql_Transactions_Locking - Fatal编程技术网

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

mysql错误:超过锁定等待超时,mysql,transactions,locking,Mysql,Transactions,Locking,我在我的Web服务器上使用mysql和asp.net。我还使用sqlite数据库,以便能够在其他设备上使用该数据库。我需要在两个数据库之间发送数据。这是每天需要做很多次的事情。这是我如何做到这一点的一个例子: using (MySqlTransaction mysqltransaction = mysqlconn.BeginTransaction()) { using (mysqlcmd) {

我在我的Web服务器上使用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行

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

而且整个解决方案似乎很慢。我是否需要为每个插入查询执行子选择


谢谢

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

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

这将一次插入三行,而且速度要快得多。

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

INSERT INTO table (col1, col2) VALUES ('a', 1), ('b', 2), ('c', 3)
这将一次插入三行,而且速度要快得多