Nodejs node-mysql好像不支持事务吧?Nodejs连mysql,有什么比较好的驱动?可实现中文完美支持,支持事务与回滚等等。
Nodejs node-mysql好像不支持事务吧?Nodejs连mysql,有什么比较好的驱动?可实现中文完美支持,支持事务与回滚等等。
node-mysql 好像不支持事务吧?node.js连mysql,有什么比较好的驱动?可实现中文完美支持,支持事务与回滚等等。
当然可以。在 Node.js 中连接 MySQL 数据库时,确实有一些驱动程序可以更好地支持事务、中文字符集以及其他高级功能。一个非常流行的驱动程序是 mysql2
,它是在 node-mysql
的基础上改进的,并且提供了更多的功能和更好的性能。
使用 mysql2
驱动
首先,你需要安装 mysql2
包:
npm install mysql2
示例代码
以下是一个简单的示例,展示了如何使用 mysql2
连接到 MySQL 数据库并执行事务操作。
安装和配置
确保你的 MySQL 服务器已经设置好,并且数据库中包含一个表用于测试事务。
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
Node.js 代码
const mysql = require('mysql2/promise');
async function main() {
// 创建连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'testdb',
charset: 'utf8mb4' // 支持中文
});
try {
// 开始事务
const connection = await pool.getConnection();
await connection.query('START TRANSACTION');
// 执行 SQL 操作
await connection.query('INSERT INTO users (name, email) VALUES (?, ?)', ['Alice', 'alice@example.com']);
await connection.query('INSERT INTO users (name, email) VALUES (?, ?)', ['Bob', 'bob@example.com']);
// 提交事务
await connection.commit();
console.log('Transaction committed successfully.');
} catch (error) {
// 回滚事务
await connection.rollback();
console.error('Transaction rolled back:', error.message);
} finally {
// 释放连接
connection.release();
}
}
main().catch(console.error);
解释
- 创建连接池:使用
mysql.createPool
方法创建一个连接池,这样可以更高效地管理数据库连接。 - 开始事务:使用
START TRANSACTION
语句开始一个新的事务。 - 执行 SQL 操作:在事务中执行多个 SQL 操作。
- 提交或回滚事务:如果所有操作都成功,则调用
connection.commit()
提交事务;如果发生错误,则调用connection.rollback()
回滚事务。 - 释放连接:无论成功还是失败,都要释放连接以避免资源泄漏。
通过这种方式,你可以利用 mysql2
驱动程序来处理复杂的事务逻辑,并且支持中文字符集。
确定不支持事务?我怎么好像觉得是支持的
你的表的存储格式 选对了哇?
那个不是跟mysql用的存储引擎有关的么。。
找到这个。没用过。
node-mysql-transaction transaction wrapper for mysql driver
事务是支持的,使用mysql-queues 就可以了 下面是部分代码
var queues = require('mysql-queues');
const DEBUG = true;
queues(connection, DEBUG);
var trans = connection.startTransaction();
我参考的就是这个。https://github.com/joyent/node/wiki/modules#wiki-db-mysql 里面也是介绍说 mysql-queues 支持事务,但是不知道可以完美支持中文。。囧
Node.js 连接 MySQL 时,确实可以使用 node-mysql
(也称为 mysql
),但如果你需要更高级的功能如事务支持、连接池等,建议使用 mysql2
。mysql2
是 node-mysql
的一个分支,它不仅支持中文完美支持,还提供了更丰富的功能。
示例代码
安装 mysql2
npm install mysql2
示例代码
const mysql = require('mysql2/promise');
async function main() {
// 创建一个连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'testdb',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
try {
// 开启事务
const [connection] = await pool.getConnection();
await connection.query('START TRANSACTION');
// 执行SQL语句
await connection.query('INSERT INTO users (name, email) VALUES (?, ?)', ['Alice', 'alice@example.com']);
await connection.query('INSERT INTO users (name, email) VALUES (?, ?)', ['Bob', 'bob@example.com']);
// 提交事务
await connection.query('COMMIT');
console.log('Transaction committed successfully!');
} catch (error) {
// 回滚事务
await connection.query('ROLLBACK');
console.error('Transaction failed, rolled back:', error);
} finally {
// 释放连接
if (connection) connection.release();
}
}
main().catch(console.error);
解释
- 安装:首先通过 npm 安装
mysql2
。 - 创建连接池:使用
createPool
方法创建一个连接池,以管理数据库连接。 - 开启事务:通过
connection.query('START TRANSACTION')
开始一个新的事务。 - 执行SQL:执行插入语句。
- 提交或回滚:如果所有操作成功,则提交事务;如果遇到错误,则回滚事务。
- 释放连接:确保无论成功还是失败,都要释放连接。
这种方式可以确保数据的一致性和完整性,并且支持中文字符的处理。