Web项目逻辑删除的设计

 

一:逻辑删除

逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(is_delete)或者说是状态字段(status)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。

对应的SQL语句:update 表名 set is_delete = 1 where id = 1;语句表示,在该表中将id为1的信息进行逻辑删除,那么客户端进行查询id为1的信息,服务器就不会提供信息。倘若想继续为客户端提供该信息,可将 is_delete 更改为 0 。

 

二:物理删除

物理删除就是真正的从数据库中做删除操作了。

对应的SQL语句:delete from 表名 where 条件;执行该语句,即为将数据库中该信息进行彻底删除,无法恢复。

 

关于回收站的原理,其实就是利用了逻辑删除,对于删除文件进入回收站的本质只是在操作系统的帮助下对文件加上了 某个标记,资源管理器中对含有这种标记的文件不会显示。当从回收站恢复的时候只是移除了加上的标记而已,而清空回收站就是进行了物理删除。

而商城网站,如淘宝,京东…会大量使用逻辑删除进行操作数据库。

切记,作为编程人员对于删除,一定要慎之又慎,一定要再三考虑。特别是物理删除,可以的话,就忘掉他吧。

= =!!!

 

https://www.v2ex.com/amp/t/574913

 

场景和需求

  • 现在的业务里,经常有客户需要找回数据。
  • 我们从数据统计的角度也需要将删除的数据保留。

方案

  • 在表里加一个字段做标记
    优点:"删除"时只需做更新操作
    缺点:已有的大量查询更新等操作需要更改

     

  • 将删除数据插入到另外一张备份表
    优点:代码里只需修改删除部分的代码
    缺点:增加数据库读写操作

https://fast.v2ex.com/t/406208

 

 

逻辑删除真的不是一个好的设计

https://www.jianshu.com/p/f37281576585

 

https://www.infoq.cn/article/2009/09/Do-Not-Delete-Data/

 

 

正确是使用姿势:

Test 是模型类

$data = Test::get('5899d8bd2176de6b2d487f82')->delete();

 

$test = new Test();

$data =$test::get('5899d8bd2176de6b2d487f84')->delete();

 

$data = $test->where('_id', '5899d8bd2176de6b2d487f81')->find()->delete();

 

文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。

 

若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)

posted @ 2020-05-16 18:32  刘俊涛的博客  阅读(769)  评论(0编辑  收藏  举报