封装webSQL(四)封装 delete

作者: 自然框架 | 来源:发表于2021-07-26 20:33 被阅读0次

删除语句

一般项目都有两种删除方式,一种是物理删除,一种是逻辑删除。
物理删除就是用 delete 语句,把记录从数据库里面删掉。
逻辑删除,就是做一个标记字段,删除的时候只是改一下标记字段,而不是用 delete 把记录删掉。

逻辑删除有两个好处:

  • 误删除后,便于找回数据。
  • 便于保证数据的完整性。

物理删除

delete from table where id = 111

逻辑删除

update table set isDel = 1 where id = 111

封装

还是老规矩,用 meta 和 id 拼接 SQL。

物理删除


/**
 * 实现删除数据的功能。物理删除,delete from
 * @param { MySQLHelp } help 访问数据库的实例
 * @param { Object } meta 表、字段
 * @param { number|string } id 主键字段值
 * @param { connection } cn 如果使用事务的话,需要传递开启事务时创建的连接对象
 * @returns 添加记录的ID
 * * meta 结构:
 * * * tableName: '', 表名
 * * * idKey: 'id', 主键字段名称
 */
export default function deleteData (help, meta, id, cn = null) {
  // 提交SQL语句
  const myPromise = new Promise((resolve, reject) => {
    const sql = `DELETE FROM ${meta.tableName} WHERE ${meta.idKey}=?`

    help.query(sql, [id], cn)
      .then((res) => {
        // 成功了,返回给调用者
        resolve(res.rowsAffected)
      })
      .catch((err) => {
        reject(err)
      })
  })
  return myPromise
}

逻辑删除

/**
 * 实现删除数据的功能。逻辑删除,update set flag = 1
 * @param { MySQLHelp } help 访问数据库的实例
 * @param { Object } meta 表、字段
 * @param { number|string } id 主键字段值
 * @param { connection } cn 如果使用事务的话,需要传递开启事务时创建的连接对象
 * @returns 添加记录的ID
 * * meta 结构:
 * * * tableName: '', 表名
 * * * idKey: 'id', 主键字段名称
 * * * delFlag: 'isDel', 逻辑删除,标记字段名称
 */
export default function deleteData (help, meta, id, cn = null) {
  const myPromise = new Promise((resolve, reject) => {
    const sql = `UPDATE ${meta.tableName} SET ${meta.delFlag} = 1 WHERE ${meta.idKey}=?`

    help.query(sql, [id], cn)
      .then((res) => {
        // 成功了,返回给调用者
        resolve(res.rowsAffected)
      })
      .catch((err) => {
        reject(err)
      })
  })
  return myPromise
}

使用方式

和前面的使用方式是一样的。

import {
  deleteModel,
  deleteFlag
} from '../../packages/websql.js'

const meta = {
  tableName: 't_test1',
  idKey: 'id',
  delFlag: 'c1'
}
const model = {
  c1: '666',
  c2: 'bb2'
}

deleteModel(help, meta, newId).then((res) => {
    console.log('删除完成,影响行数:', res)
  })

deleteFlag(help, meta, 3).then((res) => {
  console.log('删除完成,影响行数:', res)
})

等等,前端好像不需要这么麻烦吧。。。

物理删除 数据结果

相关文章

网友评论

    本文标题:封装webSQL(四)封装 delete

    本文链接:https://www.haomeiwen.com/subject/xbxpmltx.html