gpt4 book ai didi

mysql - NodeJS + mysql : using connection pool leads to deadlock tables

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:40 24 4
gpt4 key购买 nike

我正在使用 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
});

奇怪的是,错误确实在完全相同的时间发生在完全相同的数据上。IE。我有一个事务,其中我连续插入三个表,每次都使用上一个 INSERT 语句中最后插入的 ID。对于某些数据,此方法工作正常,对于某些数据,第三个 INSERT 会产生 ER_LOCK_WAIT_TIMEOUT 错误。当我在 NodeJS 中使用单连接时,这工作正常,所以这一定是与连接池相关的问题。

如有任何帮助,我们将不胜感激。

最佳答案

不太愿意回答我自己的问题,但是这个问题是通过从池中显式创建连接并在事务期间将其用于每个 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();
}
});
});

关于mysql - NodeJS + mysql : using connection pool leads to deadlock tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40378350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com