事务
Exec Transaction DTS
提示
查询语句及数据变更语句类型描述具体详情请参考各详情文档描述
ts
interface TransactionChange<T, ResultSetHeader> {
/**
* 执行数据插入语句
*
* Execute the data insert statement
*/
insert(v: InsertParam): Promise<ResultSetHeader>
/**
* 执行数据批量更新语句
*
* Execute data batch update statements
*/
batchUpdate(v: T): Promise<ResultSetHeader>
/**
* 执行数据删除语句
*
* Execute a data delete statement
*/
delete(v: DeleteParam): Promise<ResultSetHeader>
/**
* 执行数据更新语句
*
* Execute the data update statement
*/
update(v: UpdateParam): Promise<ResultSetHeader>
}
/**
* 事务参数配置
*/
interface TransactionParams<T, ResultSetHeader> {
/**
* 执行原SQL语句
*
* Execute query statement
* @param param 参数值
* @returns
*/
sql(sql: string, param?: VALUE_TYPE): Promise<QueryResult>
/**
* 执行查询语句
*
* Execute query statement
* @param v 配置参数信息
* @returns
*/
query(v: ExecQueryParam): Promise<Record<string, any>[]>
/**
* 执行查询数据详情语句
*
* Execute the statement to query data details
* @param v 参数信息
*/
detail(v: ExecQueryBaseParam): Promise<Record<string, any> | undefined>
/**
* 获取数据总数
* @param v 参数信息
*/
count(v: QueryCountParam): Promise<number>
/**
* 数据更新函数
*/
change: TransactionChange<BatchUpdateParam<T>, ResultSetHeader>
}Example
ts
import emysql, { DefineTable } from '@aicblock/emysql' // 引用库
// 数据库实例化
const mysql = new emysql({
password: '[db登录密码]',
user: '[db登录用户名]',
database: '访问数据库名称'
})
await mysql.init()
// 定义表结构
const t_user = DefineTable({
tableName: 't_user',
columns: [
{
name: 'id',
dataType: 'INT',
primaryKey: true,
autoIncrement: true,
comments: '主键id'
},
{
name: 'name',
dataType: 'VARCHAR',
length: 45,
notNull: true,
comments: '名称'
},
{
name: 'age',
dataType: 'INT',
notNull: true,
comments: '年龄'
}
]
})
await mysql.table.create([t_user])
// t_user 数据
const user = [
{ name: 'name1', age: 20, id: 1 },
{ name: 'name2', age: 21, id: 2 },
{ name: 'name3', age: 30, id: 3 },
{ name: 'name4', age: 31, id: 4 },
{ name: 'name5', age: 18, id: 5 }
]
await mysql.change.insert({
t: t_user,
params: user
})
// 更新失败回滚
await mysql.transaction(async (v) => {
try {
await v.change.update({
t: t_user,
condition: { id: 1 },
params: { name: 'name1_update', age: 22 }
})
throw Error('STOP UPDATE')
} catch (error) {
return Promise.reject(error)
}
})
await mysql.detail({
t: t_user,
condition: { id: 1 }
})
// result:: { name: 'name1', age: 20, id: 1 }