Skip to content

唯一索引新增更新

DuplicateInsert Param DTS

ts
/**
 * 表参数配置
 */
export interface TableConfig {
  /**
   * 表名
   */
  name: string
  /**
   * 表别名
   */
  alias?: string
}

export type TABLE_TYPE = string | TableConfig

/**
 * 数据变更基础参数
 */
export interface BaseChangeParam {
  /**
   * 表名
   */
  t: TABLE_TYPE
}

/**
 * 插入唯一约束更新
 */
export interface DuplicateInsertParam extends BaseChangeParam {
  /**
   * 配置参数
   */
  params: IAnyObject | IAnyObject[]
  /**
   * 唯一索引字段名
   */
  unique?: string
  /**
   * 不更新字段
   */
  excludeField?: string | string[]
}

Example

注意事项

插入数据前确保数据表结构已经存在。否者执行会抛出 '[table name]' doesn't exist 异常。并且确保表存在唯一索引约束否则会导致重复数据插入

单条数据插入

ts
import emysql from '@dpapejs/emysql'

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

mysql.change
  .duplicateInsert({
    t: 't_user',
    params: {
      name: '张三',
      age: 15,
      sex: 1,
      create_at: new Date(),
      unionid: 'a'
    },
    unique: 'unionid',
    excludeField: ['id', 'create_at']
  })
  .then((result) => {
    // 插入数据成功 当 unionid 存在更新相关数据, 不存在则新增一条新增数据
  })
  .catch((err) => {
    // 插入数据失败
    console.error('[ERROR]::', err)
  })

多条数据插入

ts
import emysql from '@dpapejs/emysql'

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

mysql.change
  .duplicateInsert({
    t: 't_user',
    params: [
      {
        name: '张三',
        age: 15,
        sex: 1,
        create_at: new Date(),
        unionid: 'a'
      },
      {
        name: '李四',
        age: 18,
        sex: 0,
        create_at: new Date(),
        unionid: 'b'
      },
      {
        name: '王五',
        age: 14,
        sex: 1,
        create_at: new Date(),
        unionid: 'c'
      }
    ],
    unique: 'unionid',
    excludeField: ['id', 'create_at']
  })
  .then((result) => {
    // 插入数据成功 当 unionid 存在更新相关数据, 不存在则新增一条新增数据
  })
  .catch((err) => {
    // 插入数据失败
    console.error('[ERROR]::', err)
  })