mm_mysql 2.2.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -34
- package/db.js +144 -170
- package/index.js +393 -156
- package/package.json +2 -2
- package/sql.js +190 -349
- package/test.js +218 -128
- package/test_create_table.js +0 -193
package/README.md
CHANGED
|
@@ -64,26 +64,22 @@ new Mysql(config)
|
|
|
64
64
|
|
|
65
65
|
```javascript
|
|
66
66
|
const config = {
|
|
67
|
-
host: "127.0.0.1",
|
|
68
|
-
port: 3306,
|
|
69
|
-
user: "root",
|
|
70
|
-
password: "password",
|
|
71
|
-
database: "dbname",
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
host: "127.0.0.1", // 服务器地址
|
|
68
|
+
port: 3306, // 端口号
|
|
69
|
+
user: "root", // 连接用户名
|
|
70
|
+
password: "password", // 连接密码
|
|
71
|
+
database: "dbname", // 数据库名
|
|
72
|
+
charset: "utf8mb4", // 字符集
|
|
73
|
+
timezone: "+08:00", // 时区
|
|
74
|
+
connect_timeout: 20000, // 连接超时时间(毫秒)
|
|
75
|
+
connection_limit: 10, // 连接池大小
|
|
76
|
+
acquire_timeout: 20000, // 获取连接超时时间(毫秒)
|
|
77
|
+
wait_for_connections: true // 是否等待连接
|
|
77
78
|
};
|
|
78
79
|
```
|
|
79
80
|
|
|
80
81
|
#### 主要方法
|
|
81
82
|
|
|
82
|
-
##### setConfig(config)
|
|
83
|
-
设置数据库配置参数
|
|
84
|
-
- `config` {Object} 配置对象
|
|
85
|
-
- 返回:{Mysql} 实例本身
|
|
86
|
-
|
|
87
83
|
##### open()
|
|
88
84
|
打开数据库连接
|
|
89
85
|
- 返回:{Promise<boolean>} 连接结果
|
|
@@ -92,25 +88,23 @@ const config = {
|
|
|
92
88
|
关闭数据库连接
|
|
93
89
|
- 返回:{Promise<boolean>} 关闭结果
|
|
94
90
|
|
|
95
|
-
##### run(sql, params
|
|
91
|
+
##### run(sql, params)
|
|
96
92
|
执行查询SQL语句
|
|
97
93
|
- `sql` {String} SQL语句
|
|
98
94
|
- `params` {Array} 参数数组(可选)
|
|
99
|
-
- `timeout` {Number} 超时时间(毫秒,可选)
|
|
100
95
|
- 返回:{Promise<Array>} 查询结果数组
|
|
101
96
|
|
|
102
|
-
##### exec(sql, params
|
|
97
|
+
##### exec(sql, params)
|
|
103
98
|
执行非查询SQL语句(增删改)
|
|
104
99
|
- `sql` {String} SQL语句
|
|
105
100
|
- `params` {Array} 参数数组(可选)
|
|
106
|
-
-
|
|
107
|
-
- 返回:{Promise<Object>} 执行结果对象,包含affectedRows和insertId等信息
|
|
101
|
+
- 返回:{Promise<Object>} 执行结果对象,包含insertId、affectedRows和changedRows等信息
|
|
108
102
|
|
|
109
|
-
##### read(table,
|
|
103
|
+
##### read(table, condition, options)
|
|
110
104
|
读取表数据
|
|
111
105
|
- `table` {String} 表名
|
|
112
|
-
- `
|
|
113
|
-
- `options` {Object}
|
|
106
|
+
- `condition` {Object} 查询条件(可选)
|
|
107
|
+
- `options` {Object} 选项配置(可选)
|
|
114
108
|
- 返回:{Promise<Array>} 查询结果
|
|
115
109
|
|
|
116
110
|
##### db()
|
|
@@ -119,13 +113,29 @@ const config = {
|
|
|
119
113
|
|
|
120
114
|
##### beginTransaction()
|
|
121
115
|
开始事务
|
|
122
|
-
- 返回:{Promise<Object>}
|
|
116
|
+
- 返回:{Promise<Object>} 事务连接对象,包含connection、commit、rollback方法
|
|
123
117
|
|
|
124
118
|
##### transaction(callback)
|
|
125
119
|
执行事务
|
|
126
120
|
- `callback` {Function} 事务回调函数,接收事务连接作为参数
|
|
127
121
|
- 返回:{Promise<any>} 回调函数的返回结果
|
|
128
122
|
|
|
123
|
+
##### getConn()
|
|
124
|
+
获取数据库连接(内部使用)
|
|
125
|
+
- 返回:{Promise<Object>} 数据库连接对象
|
|
126
|
+
|
|
127
|
+
##### getPoolStats()
|
|
128
|
+
获取连接池状态信息
|
|
129
|
+
- 返回:{Object} 连接池状态对象
|
|
130
|
+
|
|
131
|
+
##### healthCheck()
|
|
132
|
+
健康检查
|
|
133
|
+
- 返回:{Promise<Object>} 健康检查结果
|
|
134
|
+
|
|
135
|
+
##### init()
|
|
136
|
+
初始化MySQL服务(兼容性方法)
|
|
137
|
+
- 返回:{Promise<void>}
|
|
138
|
+
|
|
129
139
|
### DB类方法
|
|
130
140
|
|
|
131
141
|
#### createTable(model, options)
|
|
@@ -187,13 +197,57 @@ const config = {
|
|
|
187
197
|
|
|
188
198
|
#### beginTransaction()
|
|
189
199
|
开始事务
|
|
190
|
-
- 返回:{Promise}
|
|
200
|
+
- 返回:{Promise<Object>} 事务连接对象,包含connection、commit、rollback方法和_is_ended状态检查
|
|
191
201
|
|
|
192
|
-
#### transaction(
|
|
193
|
-
|
|
194
|
-
- `
|
|
195
|
-
-
|
|
196
|
-
|
|
202
|
+
#### transaction(callback)
|
|
203
|
+
执行事务
|
|
204
|
+
- `callback` {Function} 事务回调函数,接收事务连接对象作为参数
|
|
205
|
+
- 返回:{Promise<any>} 回调函数的返回结果
|
|
206
|
+
|
|
207
|
+
事务连接对象包含以下方法:
|
|
208
|
+
- `connection` {Object} - 数据库连接对象
|
|
209
|
+
- `commit()` {Function} - 提交事务
|
|
210
|
+
- `rollback()` {Function} - 回滚事务
|
|
211
|
+
- `_is_ended()` {Function} - 检查事务是否已结束
|
|
212
|
+
|
|
213
|
+
### Mysql管理器
|
|
214
|
+
|
|
215
|
+
#### mysqlAdmin(scope, config)
|
|
216
|
+
获取Mysql管理器实例
|
|
217
|
+
- `scope` {String} 作用域名称(可选,默认为'sys')
|
|
218
|
+
- `config` {Object} 配置参数
|
|
219
|
+
- 返回:{Mysql} Mysql实例
|
|
220
|
+
|
|
221
|
+
使用示例:
|
|
222
|
+
```javascript
|
|
223
|
+
const { mysqlAdmin } = require('mm_mysql');
|
|
224
|
+
|
|
225
|
+
async function example() {
|
|
226
|
+
// 获取默认作用域的Mysql实例
|
|
227
|
+
const mysql1 = mysqlAdmin('default', {
|
|
228
|
+
host: 'localhost',
|
|
229
|
+
user: 'root',
|
|
230
|
+
password: '123456',
|
|
231
|
+
database: 'test'
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// 获取另一个作用域的Mysql实例
|
|
235
|
+
const mysql2 = mysqlAdmin('backup', {
|
|
236
|
+
host: 'localhost',
|
|
237
|
+
user: 'root',
|
|
238
|
+
password: '123456',
|
|
239
|
+
database: 'backup_db'
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
await mysql1.open();
|
|
243
|
+
await mysql2.open();
|
|
244
|
+
|
|
245
|
+
// 使用实例...
|
|
246
|
+
|
|
247
|
+
await mysql1.close();
|
|
248
|
+
await mysql2.close();
|
|
249
|
+
}
|
|
250
|
+
```
|
|
197
251
|
|
|
198
252
|
### 使用示例
|
|
199
253
|
|
|
@@ -349,13 +403,13 @@ async function transactionExample() {
|
|
|
349
403
|
|
|
350
404
|
try {
|
|
351
405
|
// 使用transaction方法执行事务
|
|
352
|
-
const result = await mysql.transaction(async (
|
|
406
|
+
const result = await mysql.transaction(async (transaction) => {
|
|
353
407
|
// 在事务中执行多个操作
|
|
354
|
-
const insertResult1 = await
|
|
355
|
-
const insertResult2 = await
|
|
408
|
+
const insertResult1 = await transaction.connection.execute('INSERT INTO users (name, age) VALUES (?, ?)', ['赵六', 35]);
|
|
409
|
+
const insertResult2 = await transaction.connection.execute('INSERT INTO users (name, age) VALUES (?, ?)', ['孙七', 40]);
|
|
356
410
|
|
|
357
411
|
// 如果都成功,返回结果
|
|
358
|
-
return { user1: insertResult1.insertId, user2: insertResult2.insertId };
|
|
412
|
+
return { user1: insertResult1[0].insertId, user2: insertResult2[0].insertId };
|
|
359
413
|
});
|
|
360
414
|
|
|
361
415
|
console.log('Transaction succeeded:', result);
|
|
@@ -383,9 +437,21 @@ transactionExample().catch(console.error);
|
|
|
383
437
|
- `_has`: IN查询
|
|
384
438
|
- `_like`: LIKE查询
|
|
385
439
|
6. createTable方法会根据字段值自动推断数据类型,如需更精确的类型控制,建议直接使用SQL语句
|
|
440
|
+
7. 连接池模式下,建议使用mysqlAdmin方法获取实例以确保线程安全
|
|
441
|
+
8. 支持连接池状态监控和健康检查,可用于系统监控
|
|
442
|
+
9. 基于mysql2/promise模块,支持async/await语法
|
|
386
443
|
|
|
387
444
|
## 更新日志
|
|
388
445
|
|
|
446
|
+
### v2.3.0
|
|
447
|
+
- 基于mysql2/promise模块重构,提供更好的性能和稳定性
|
|
448
|
+
- 改进连接池管理,支持连接池状态监控
|
|
449
|
+
- 优化事务处理机制,提供更安全的事务管理
|
|
450
|
+
- 新增健康检查功能,支持连接状态监控
|
|
451
|
+
- 新增mysqlAdmin管理器,支持线程安全的实例管理
|
|
452
|
+
- 改进错误处理机制,提供更详细的错误信息
|
|
453
|
+
- 优化配置参数,支持更多mysql2原生配置选项
|
|
454
|
+
|
|
389
455
|
### v2.2.0
|
|
390
456
|
- 新增createTable方法,支持多种数据类型自动推断
|
|
391
457
|
- 支持boolean类型自动转换为TINYINT(1)
|