#硬删除
定义:硬删除就是传统的物理删除,直接将记录从数据库中删除
例如:在我们之前写程序的时候,经常需要删除一条记录,删除语句则是:delete from table where condition=conditionValue
这个时候,在数据库中是真正意义上的删除,你没法再通过select语句查出来,而这个做法,就叫硬删除
缺点:容易误操作从而删除重要的数据,如果想要恢复该数据,需要锁表再去访问日志文件,但是这样可能会造成大量的人力资源浪费(不言多喻,没有后悔药)
优点:去除部分冗杂数据,节省空间
- 例如:这里有一个商品表,和一些相关的订单信息表,然后订单表是关联到商品id的,这个时候如果直接将这个商品删除,就会导致订单查不出这个商品信息。
#软删除
定义:可以叫做逻辑删除、标记删除我们常说的删除不同,并不是真的从数据库中将这条记录去除,而是会设置一个字段,isDelete或者status字段,标识该条记录是否被删除
- 例如目前软删除的做法:(https://www.jianshu.com/p/889365078e24)
- 在表内加 isDeleted bool
- 在表内添加 deleted_at timestamp (可以为null) (gem gorm这类orm框架支持)
- 删除数据 存储到 因为一个表内
第二种方式最差 因为字段可以为null 会导致查询效率大打折扣。更重要的情况 会导致 全表扫描 如果数据量偏大会遇到性能瓶颈