精华内容
下载资源
问答
  • 物理删除和逻辑删除

    2021-06-14 18:21:22
    物理删除和逻辑删除1、物理删除2、逻辑删除 以前一直就以为数据库中的删除就是指delete语句(纯小白的认知),现在知道数据库中的删除主要有物理删除和逻辑删除,物理删除是从数据表中真的将记录剔除掉,不会再保留...

    物理删除和逻辑删除


    以前一直就以为数据库中的删除就是指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;
    

    查询结果:
    在这里插入图片描述
    刚才进行逻辑删除的记录过滤掉了,但是记录还是存在表中的,逻辑删除的最大缺点就是会冗余大量的数据记录,会占用大量的磁盘空间,而好处是保留重要数据的安全性,可以说有利有弊,看怎么选。

    展开全文
  • java 物理删除和逻辑删除 逻辑删除:文件没有被真正的删除,只不过是文件名的第一个字节被改成操作系统无法识别的字符,通常这种删除操作是可逆的,就是说用适当的工具或软件可以把删除的文件恢复出来。 物理删除:...

    java 物理删除和逻辑删除

    逻辑删除:文件没有被真正的删除,只不过是文件名的第一个字节被改成操作系统无法识别的字符,通常这种删除操作是可逆的,就是说用适当的工具或软件可以把删除的文件恢复出来。
    物理删除:指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢复的
    物理删除是计算机处理数据时的一个概念。 与物理删除相对应的是逻辑删除。逻辑删除就是对要要删除的数据打上一个删除标记,在逻辑上是数据是被删除的,但数据本身依然存在!而物理删除则是把数据从介质上彻底删除掉。

    配置逻辑删除的步骤:

    1. 在配置文件yml中应该配置的信息
    
    mybatis-plus:
      global-config:
        db-config:
          logic-delete-value: 1 # 逻辑已删除值(默认为 1),该具体删除值和数据库中的表数据对应即可
          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0),该具体删除值和数据库中的表数据对应即可
    
    1. 添加实体类注解
    @TableLogic
    private Integer delFlag;
    
    1. 对于逻辑删除拦截器bean的注入方式
    import com.baomidou.mybatisplus.core.injector.ISqlInjector;
    import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * mybatis-plus配置
     *
     * @author gsl
     */
    @Configuration
    public class MybatisPlusConfig {
    
        /**
         * 在配置文件中注册删除组件
         * @return
         */
        @Bean
        public ISqlInjector sqlInjector() {
            return new LogicSqlInjector();
        }
    }
    
    展开全文
  • MySQL 物理删除和逻辑删除 物理删除 概念 1、就是用DELETE、TRUNCATE、DROP语句删除数据 2、物理删除是把数据从硬盘中删除,释放存储空间,缩小表体积,对性能提升有帮助 代价 1、物理删除是真的删除,数据恢复...

    MySQL 物理删除和逻辑删除

    物理删除

    概念

    1、就是用DELETE、TRUNCATE、DROP语句删除数据
    2、物理删除是把数据从硬盘中删除,释放存储空间,缩小表体积,对性能提升有帮助

    代价

    1、物理删除是真的删除,数据恢复难度大
    2、物理删除会造成主键不连续,导致分页查询数据慢

    应用场景

    1、核心业务表的数据不适合做物理删除,只做状态变更。
    2、随着业务表数据增长,如何既不删除数据,有缩小表体积,可以把记录转移到历史记录表

    逻辑删除

    1、即在表中添加一个字段(is_deleteed),用字段值进行标记该数据是否已经逻辑删除,查询时跳过这些数据
    2、核心业务表的数据必须采用逻辑删除

    结论

    核心业务数据必须使用逻辑删除,非业务数据看实际进行选择!

    展开全文
  • Mybatis实现物理删除和逻辑删除。 1.首先明白什么是物理删除,什么是逻辑删除? 什么是物理删除呢?就是直接干掉数据库的数据,无法再恢复回来。但在当今的企业级项目中,物理删除已经非常少见,而是使用逻辑删除。...

    Mybatis实现物理删除和逻辑删除。

    教程目录:
    教程一: Mybatis-plus使用教程
    教程二:mybatis-plus的字段自动填充
    教程三:Mybatis实现物理删除和逻辑删除
    教程四:Mybatis-plus实现乐观锁
    教程五:Mybatis-plus实现条件查询

    扫码关注公众号,更多资料尽在掌握。
    在这里插入图片描述

    1.首先明白什么是物理删除,什么是逻辑删除?
    什么是物理删除呢?就是直接干掉数据库的数据,无法再恢复回来。但在当今的企业级项目中,物理删除已经非常少见,而是使用逻辑删除。所谓逻辑删除本质上是个update操作,通过一个标记字段来识别某个数据是否被隐藏起来,但是对于用户来说看不到了自然以为就是删除了。
    我们分别来看看mybatis-plus的物理删除和逻辑删除。

    项目的创建就不详细说明了,我们直接再之前的表上操作。
    我们先来看看物理删除,写一个删除方法吧!
    物理删除方法有几种,我们来看看常用的:
    第一种、deleteById()方法,仅需传入你要删除数据的id即可。注意看控制台,这里执行的是delete语句。真正实现物理删除,数据表中的信息不存在了。
    在这里插入图片描述
    第二种、deleteBatchIds方法,批量删除,也是传入id即可。
    第三种、deleteByMap方法,条件删除。
    这些方法都是物理删除,底层执行的是delete语句。在这里插入图片描述

    逻辑删除:
    所谓逻辑删除本质上是个update操作,通过一个标记字段来识别某个数据是否被隐藏起来,假设在表中设置一个deleted字段,已删除用1表示,未删除用0表示,这样以后在每次查询数据时候,都会添加一个条件 where deleted = 0,这样就永远不会查出delete= 1 的数据了。
    接下来试试看吧!
    第一步、打开数据表,添加一个deleted字段,用来表示逻辑删除位。
    在这里插入图片描述

    我们先看一下表中的数据,所有deleted都是0表示,代表所有数据都在。
    在这里插入图片描述

    第二步、接下来在实体类中,添加该字段,并加上注解@TableLogic,该注解就表示逻辑删除位。

    import com.baomidou.mybatisplus.annotation.*;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import java.util.Date;
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        @TableId(type = IdType.ID_WORKER)
        private Long id;
        private String name;
        private Integer age;
        private String email;
        //create_time
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private  Date updateTime;
        @TableLogic
        private  Integer deleted;
    }
    
    

    在这里插入图片描述

    第三步、我们需要写一个配置类来开启mybatis-plus的逻辑删除。
    MybatisConfig.java

    import com.baomidou.mybatisplus.core.injector.ISqlInjector;
    import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MybatisConfig {
        //逻辑删除
        @Bean
        public ISqlInjector iSqlInjector(){
            return new LogicSqlInjector();
        }
    
    }
    
    

    在这里插入图片描述

    到这里逻辑删除配置成功,来测试一下吧。
    我们用deleteById()方法测试。
    在这里插入图片描述

    我们来看看控制台的输出:

    在这里插入图片描述

    看到了吗,现在底层并不在执行delete了,而是执行update语句把delete字段改变下。这样就实现了逻辑删除,

    我们再来看看数据表中数据。
    在这里插入图片描述

    这样逻辑删除就成功了。
    这里你执行一下查询所有方法也不会查到该条数据,因为查询语句后面会跟一个 where delete = 0的条件!

    项目源码:

    github地址

    展开全文
  • 物理删除: 真实删除 文件储存所用到的磁存储区域被真正的清零,不可恢复 在数据库中直接使用delete、drop删除表数据就属于物理删除 逻辑删除: 假删除 逻辑删除就是在想要被删除的数据上打一个删除标记,只要...
  • 对于物理删除和逻辑删除

    千次阅读 2017-10-08 09:47:38
    一般基础数据都是逻辑删除 仅关联关系表使用物理删除.
  • 物理删除和逻辑删除的区别

    千次阅读 2019-02-28 14:22:00
    物理删除相对应的是逻辑删除。 2、逻辑删除就是对要要删除的数据打上一个删除标记,在逻辑上是数据是被删除的,但数据本身依然存在!而物理删除则是把数据从介质上彻底删除掉。 转载于:...
  • 物理删除: 真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据 1、根据 ID 删除记录 //根据ID删除记录(物理删除) @Test public void testDeleteById(){ int result = userMapper.deleteById(1...
  • 数据库数据物理删除和逻辑删除

    万次阅读 2018-11-02 22:09:06
    今天负责的项目,有个重要的表数据被某个同事写的业务代码给delete删除了,导致系统一直报空指针异常告警。... 物理删除:指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢...
  • oracle公司开发的软件里,经常会遇到类似物理删除和逻辑删除这样一对概念,比如oracle数据库软件、oracle virtual box等。这个应该他们开发软件时的一管理对象的方法。   物理删除,就是在操作系统级别上将如数据...
  • MP查询 多值查询 利用SelectBatchIds方法传入List集合 //多值查询 @Test public void testSelectBatch(){ /... } 进行测试,发现sql语句写的是更新语句,并且执行逻辑删除后无法查找到deleted为1的数据,则完成逻辑删除
  • 物理删除和逻辑删除 物理删除就是直接从数据库里面把数据删除,一般不可恢复,逻辑删除就是给数据制一个状态,在这个状态下数据不会查出来,如果有必要可以把数据的状态恢复可以显示。一般不建议物理删除,因为这样...
  • 逻辑删除和物理删除

    2019-11-07 13:29:01
    在实际开发中基本都会有删除数据的需求,删除又分为逻辑删除和物理删除。下面说下二者的区别: 一、所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(is_del)或者说是状态字段(status)做...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,729
精华内容 691
关键字:

物理删除和逻辑删除