Skip to content

事务

Exec Transaction DTS

提示

查询语句及数据变更语句类型描述具体详情请参考各详情文档描述

ts
/**
 * 执行事务函数
 */
export type ExecTransactionFunction = (v: TransactionParams) => Promise<any>

export interface TransactionChange {
  /**
   * 执行数据插入语句
   *
   * Execute the data insert statement
   */
  insert(v: InsertParam): Promise<ExecChangeResult>
  /**
   * 唯一索引数据插入更新,存在更新数据不存在新增数据
   *
   * The unique index data was inserted and updated. The updated data existed. No new data existed
   */
  duplicateInsert(v: DuplicateInsertParam): Promise<ExecChangeResult>
  /**
   * 执行数据删除语句
   *
   * Execute a data delete statement
   */
  delete(v: DeleteParam): Promise<ExecChangeResult>
  /**
   * 执行数据更新语句
   *
   * Execute the data update statement
   */
  update(v: UpdateParam): Promise<ExecChangeResult>
}

export interface TransactionParams {
  /**
   * 执行查询语句
   *
   * Execute query statement
   * @param v 配置参数信息
   * @returns
   */
  query(v: QueryOption): Promise<IAnyObject[]>
  /**
   * 执行查询数据详情语句
   *
   * Execute the statement to query data details
   * @param v 参数信息
   */
  detail(v: QueryOption): Promise<IAnyObject | undefined>
  /**
   * 获取数据总数
   * @param v 参数信息
   */
  count(v: QueryCountOption): Promise<number>
  /**
   * 数据更新函数
   */
  change: TransactionChange
}

Example

ts
// 数据库实例化
const mysql = new emysql({
  password: '[db登录密码]',
  user: '[db登录用户名]',
  database: '访问数据库名称'
})

// 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.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)
  }
})