0

0

SQL 软删除字段该如何设计?

冰川箭仙

冰川箭仙

发布时间:2026-01-19 17:09:01

|

330人浏览过

|

来源于php中文网

原创

推荐使用 deleted_at 时间戳字段实现软删除,NULL 表示未删除,非空表示已删除,支持审计、归档与索引优化,并需在 ORM 层统一过滤。

sql 软删除字段该如何设计?

软删除字段通常用一个布尔型或时间戳字段来标记数据是否被“删除”,而不是真正从数据库中移除。设计时核心目标是:不影响原有查询逻辑、便于恢复、避免误删、兼顾性能和可读性。

推荐用 deleted_at 时间戳字段

比布尔字段(如 is_deleted)更灵活,能记录删除时间,支持按时间范围审计、自动归档或定时清理。值为 NULL 表示未删除,非空表示已软删除。

  • 建表时添加:deleted_at DATETIME NULL DEFAULT NULL
  • 查询未删除数据时统一加条件:WHERE deleted_at IS NULL
  • 删除操作改为更新:UPDATE users SET deleted_at = NOW() WHERE id = 123
  • 恢复操作只需置空:UPDATE users SET deleted_at = NULL WHERE id = 123

配合索引提升查询效率

大量数据下,WHERE deleted_at IS NULL 可能走全表扫描。建议为该字段建立单独索引,或与高频查询字段组合成联合索引。

NetShop网店系统
NetShop网店系统

NetShop软件特点介绍: 1、使用ASP.Net(c#)2.0、多层结构开发 2、前台设计不采用任何.NET内置控件读取数据,完全标签化模板处理,加快读取速度3、安全的数据添加删除读取操作,利用存储过程模式彻底防制SQL注入式攻击4、前台架构DIV+CSS兼容IE6,IE7,FF等,有利于搜索引挚收录5、后台内置强大的功能,整合多家网店系统的功能,加以优化。6、支持三种类型的数据库:Acces

下载
  • 单列索引(适合软删除比例高、常需查有效数据的场景):INDEX idx_deleted_at (deleted_at)
  • 联合索引(如常按状态+时间查):INDEX idx_status_created (deleted_at, created_at)
  • 注意:MySQL 中 IS NULL 可走索引,但部分旧版本对函数索引支持有限,避免写成 IFNULL(deleted_at, '1970-01-01') 这类表达式

业务层需统一拦截“未删除”条件

避免每个 SQL 都手动写 WHERE deleted_at IS NULL,应在 ORM 或 DAO 层做默认过滤。

  • 例如 Laravel 的 Eloquent 支持 SoftDeletes trait,自动追加全局作用域
  • MyBatis 可通过拦截器或 BaseMapper 封装通用查询条件
  • 显式查含已删除数据时,应使用明确命名的方法,如 findWithDeleted() 或传参 includeDeleted: true

慎用布尔字段 is_deleted

虽然简单,但存在语义歧义(比如初始值设 true 还是 false?逻辑反转易出错),且无法记录删除时间,后续扩展性差。

  • 若必须用布尔型,务必设默认值为 FALSE,并确保所有插入不显式赋值
  • 索引效果不如时间戳(MySQL 对低基数布尔字段索引效率较低)
  • 不建议在新项目中首选,仅用于遗留系统兼容或极简场景
软删除不是银弹——长期堆积的“已删”数据会拖慢备份、迁移和统计;定期归档或物理清理仍有必要。设计时把 deleted_at 当作一等公民字段对待,从建表、索引、查询到业务逻辑层层对齐,才能真正落地可靠。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

316

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

275

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

369

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

81

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

64

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.08.05

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

683

2023.10.12

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

12

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 801人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号