0%

项目中的业务处理--软删除和硬删除


#硬删除

定义:硬删除就是传统的物理删除,直接将记录从数据库中删除

  • 例如:在我们之前写程序的时候,经常需要删除一条记录,删除语句则是:delete from table where condition=conditionValue

  • 这个时候,在数据库中是真正意义上的删除,你没法再通过select语句查出来,而这个做法,就叫硬删除

缺点:容易误操作从而删除重要的数据,如果想要恢复该数据,需要锁表再去访问日志文件,但是这样可能会造成大量的人力资源浪费(不言多喻,没有后悔药)

优点:去除部分冗杂数据,节省空间

  • 例如:这里有一个商品表,和一些相关的订单信息表,然后订单表是关联到商品id的,这个时候如果直接将这个商品删除,就会导致订单查不出这个商品信息。

#软删除

定义:可以叫做逻辑删除、标记删除我们常说的删除不同,并不是真的从数据库中将这条记录去除,而是会设置一个字段,isDelete或者status字段,标识该条记录是否被删除

  1. 在表内加 isDeleted bool
  2. 在表内添加 deleted_at timestamp (可以为null) (gem gorm这类orm框架支持)
  3. 删除数据 存储到 因为一个表内

第二种方式最差 因为字段可以为null 会导致查询效率大打折扣。更重要的情况 会导致 全表扫描 如果数据量偏大会遇到性能瓶颈

缺点:会导致查数据慢(https://ruby-china.org/topics/34540)

坚持原创技术分享,您的支持将鼓励我继续创作.