我使用NodeJS和mysql
库来访问MySQL数据库。
当我建立单一连接并重复使用它时,它可以正常工作:
global.mysql = mysql_module.createConnection({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password
});
当我使用连接池时,我在事务中遇到ER_LOCK_WAIT_TIMEOUT
错误。
global.mysql = mysql_module.createPool({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database : config.mysql.database,
connectionLimit : 50
});
奇怪的是,错误确实在完全相同的时间发生在完全相同的数据上。
即我有一个事务,我连续插入三个表,每次使用上一个INSERT
语句中的最后一个插入ID。对于某些数据,这种方法很好,对于某些数据,第三个INSERT
会产生ER_LOCK_WAIT_TIMEOUT
错误。当我在NodeJS中使用单个连接时,这样可以正常工作,因此这必须与连接池有关。
任何帮助都将不胜感激。
答案 0 :(得分:1)
没有大肆宣传我自己的问题,但问题是通过从池中显式创建连接并在事务期间将其用于每个sql语句来解决的
pool.getConnection(function(err, connection) {
connection.query( 'START TRANSACTION', function(err, rows) {
// do all sql statements with connection and then
connection.query( 'COMMIT', function(err, rows) {
connection.release();
}
});
});