SequelizeJS 软删除

作者:编程家 分类: database 时间:2025-07-03

使用 SequelizeJS 实现软删除功能

在开发数据库应用程序时,数据的删除是一个常见的操作。然而,在某些情况下,我们可能希望保留被删除数据的历史记录,而不是永久性地从数据库中删除它们。这时,软删除就变得非常有用。软删除是一种通过标记数据而不是实际删除来达到删除效果的方法。SequelizeJS 是一个流行的 Node.js ORM(对象关系映射)库,它提供了方便的方法来实现软删除功能。

### 1. 安装 Sequelize 和数据库驱动

首先,确保已经安装了 Sequelize 和适用于你数据库的驱动。在本例中,我们以 MySQL 为例,你可以根据需要选择其他数据库。

bash

npm install --save sequelize mysql2

### 2. 定义模型

在定义 Sequelize 模型时,我们需要添加一列来标记数据是否已被删除。通常,我们使用一个名为 `deletedAt` 的列来存储删除的时间戳。以下是一个简单的例子:

javascript

const { Sequelize, DataTypes } = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {

host: 'localhost',

dialect: 'mysql',

});

const User = sequelize.define('User', {

username: DataTypes.STRING,

email: DataTypes.STRING,

// 添加 deletedAt 列,用于软删除

deletedAt: DataTypes.DATE

});

### 3. 启用软删除

在 Sequelize 中启用软删除非常简单,只需在模型定义中添加 `paranoid: true` 选项即可。这会告诉 Sequelize 使用 `deletedAt` 列进行软删除。

javascript

const User = sequelize.define('User', {

username: DataTypes.STRING,

email: DataTypes.STRING,

// 添加 deletedAt 列,用于软删除

deletedAt: DataTypes.DATE

}, {

paranoid: true

});

### 4. 进行软删除操作

现在,你可以像往常一样使用 Sequelize 方法删除记录,但它将自动进行软删除。软删除会将 `deletedAt` 列设置为当前时间戳,而不会从数据库中删除记录。

javascript

// 进行软删除

await User.destroy({

where: { id: 1 }

});

### 5. 恢复软删除的数据

如果需要恢复软删除的数据,可以使用 `restore` 方法。这会将 `deletedAt` 列重置为 `null`。

javascript

// 恢复软删除的数据

await User.restore({

where: { id: 1 }

});

###

通过使用 SequelizeJS 的软删除功能,我们可以轻松实现对数据的安全删除和恢复操作。软删除不仅能够保留历史数据,还有助于避免意外数据丢失。在定义模型时启用 `paranoid` 选项,可以简单而有效地为应用程序添加软删除功能。使用软删除,你可以更加灵活地管理数据的生命周期,确保应用程序在处理删除操作时更加安全和可维护。