以前一直就以为数据库中的删除就是指delete语句(纯小白的认知),现在知道数据库中的删除主要有物理删除和逻辑删除,物理删除是从数据表中真的将记录剔除掉,不会再保留,无法再查询到,也就是通过delete语句删除。而逻辑删除并不会真的从表中剔除数据,而是使用一个标记字段,进行逻辑删除时只需更新这个标记字段的值就行了,查询时附带这个字段值作为限制就可以达到删除的目的。
1、物理删除
delete from people where id = 13;
执行后的表:
直接从表中删除记录,再查询的话就查不出来了,如果是很重要的数据,很显然这种删除方式是很危险的,因为数据找不回来,于是就有了逻辑删除。
2、逻辑删除
逻辑删除并不会真的从表中删除记录,而是更新标记字段的值,查询时结合这个字段来进行查询,来起到过滤数据的作用,就像真的删除了一样。
增加一个删除标记字段is_del,如下:
默认值为0,也就是正常。
逻辑删除时,将is_del字段值更新为1即代表删除,如下:
update people set is_del = 1 where id = 9
然后查询的时候使用is_del来进行数据的过滤:
select * from people where is_del = 0;
查询结果:
刚才进行逻辑删除的记录过滤掉了,但是记录还是存在表中的,逻辑删除的最大缺点就是会冗余大量的数据记录,会占用大量的磁盘空间,而好处是保留重要数据的安全性,可以说有利有弊,看怎么选。