数据批量更新
BatachUpdate Param DTS
ts
/**
* 表参数配置
*/
export interface TableConfig {
/**
* 表名
*/
name: string
/**
* 表别名
*/
alias?: string
}
export type TABLE_TYPE = string | TableConfig
/**
* 数据变更基础参数
*/
export interface BaseChangeParam {
/**
* 表名
*/
t: TABLE_TYPE
}
/**
* 唯一约束更新
*/
export interface DuplicateUpdateParam extends BaseChangeParam {
/**
* 配置参数
*/
data: IAnyObject[]
/**
* 唯一索引字段名
*/
unique?: string
/**
* 不更新字段
*/
excludeField?: string | string[]
}
export interface BatchUpdateParam extends BaseChangeParam {
/**
* 条件字段
*/
conditionField: string
/**
* 数据
*/
data: IAnyObject[]
}
/**
* 批量更新类型
* @DUPLICATE 唯一索引批量更新
* @CASE_WHEN CASE WHEN THEN 语句批量更新
* @TEMPORARY 临时表批量更新
*/
export type BATCH_TYPE = 'DUPLICATE' | 'CASE_WHEN' | 'TEMPORARY'
/**
* 批量更新数据参数
*/
export interface BATCH_UPDATE_PARAMS {
type: BATCH_TYPE
params: DuplicateUpdateParam | BatchUpdateParam
}
Example
唯一索引 DUPLICATE
更新
注意事项
唯一索引 DUPLICATE
批量更新数据,唯一索引不存在会新增数据,如果不确认业务需求请谨慎使用,请确保表字段存在唯一索引约束否则会导致重复数据插入。更新数据前确保数据表结构已经存在。否者执行会抛出 '[table name]' doesn't exist
异常。
ts
import emysql from '@dpapejs/emysql'
// 数据库实例化
const mysql = new emysql({
password: '[db登录密码]',
user: '[db登录用户名]',
database: '访问数据库名称'
})
mysql.change
.batchUpdate({
type: 'DUPLICATE',
params: {
t: 't_user',
data: [
{
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)
})
CASE WHEN 批量更新
ts
import emysql from '@dpapejs/emysql'
// 数据库实例化
const mysql = new emysql({
password: '[db登录密码]',
user: '[db登录用户名]',
database: '访问数据库名称'
})
mysql.change
.batchUpdate({
type: 'CASE_WHEN',
params: {
t: 't_user',
data: [
{
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'
}
],
conditionField: 'unionid'
}
})
.then((result) => {
// 符合条件批量更新成功
})
.catch((err) => {
// 插入数据失败
console.error('[ERROR]::', err)
})
TEMPORARY 临时表批量更新
ts
import emysql from '@dpapejs/emysql'
// 数据库实例化
const mysql = new emysql({
password: '[db登录密码]',
user: '[db登录用户名]',
database: '访问数据库名称'
})
mysql.change
.batchUpdate({
type: 'TEMPORARY',
params: {
t: 't_user',
data: [
{
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'
}
],
conditionField: 'unionid'
}
})
.then((result) => {
// 符合条件批量更新成功
})
.catch((err) => {
// 插入数据失败
console.error('[ERROR]::', err)
})