gpt4 book ai didi

mysql - 使用池连接在 Nodejs 中编写 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 22:08:34 25 4
gpt4 key购买 nike

想知道在带有连接池的nodejs中编写mysql查询的最佳实践。找到了一些相关的线索。但他们都没有回答确切的问题。所以开始一个新的。

var mysql = require('mysql');
var pool = mysql.createPool(...);

pool.getConnection(function(err, connection) {
// insert into first table

connection.query( 'Insert into table values(....)', function(err, rows) {

//get the auto incremented value from first insert and use it in the second insert

connection.query("insert into table2 values(rows.insertID,..)",function(err,rows){

//release the connection to pool after performing all the inserts

connection.release();

});
});
}); `

疑问:

  • 这是编写这些查询的正确方法
  • 使用 pool 时是否需要使用 end() 。我的理解是,当我们使用release()函数时,连接将返回到池中,我们可以重用它。那么是否需要在任何地方使用 end() 。

最佳答案

您的代码看起来不错(IE 打开一个池,多个查询,同时获取上一个查询的 insertID)。对于池,connection.release() 将“关闭” session 并返回到池。不需要connection.end()。

附加:

IMO,如果您的操作会导致阻止其他用户(主要是大量读取或大量写入),则使用连接池。由于您正在插入数据(假设这相对较快),您可以尝试使用 Transactions .

Transactions提供方法来保护您的查询(提高数据库的完整性)。如果您使用事务,则可以在提交到数据库之前检查是否调用了所有内容而没有错误(您必须选择回滚更改)。

var mysql = require('mysql');
var connection = mysql.createConnection({...});

// Open it up
connection.connect();

connection.beginTransaction(function(err){
if(err) { throw err; }

// Use connection.escape() to sanitize user input
var insertQuery = 'Insert into table values(....)';

connection.query(insertQuery, function(err, result) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
//get the auto incremented value from first insert and use it in the second insert
var rowId = result.insertId;
var insertQuery2 = "insert into table2 values(" + rowId + ",..)";

connection.query(insertQuery2, function(err, result){
if(err) {
return connection.rollback(function(){
throw err;
});
}
connection.commit(function(err){
if (err) {
return connection.rollback(function() {
throw err;
});
}
// Close it up
connection.end();
});
});
});
});

关于mysql - 使用池连接在 Nodejs 中编写 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907456/

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