逻辑删除之和数据库还有数据吗
时间: 2024-02-29 22:55:26 浏览: 15
逻辑删除只是将数据标识为已删除,但是并不会从数据库中直接删除数据。因此,数据库中仍然会保留逻辑删除的数据,只是在查询时会根据逻辑删除字段的值来判断该数据是否可用。
这样做的好处是可以保留数据的完整性和可追溯性,方便后续的数据分析和处理。同时,逻辑删除也可以方便地实现历史数据查询和管理,符合数据保留的合规要求。
需要注意的是,逻辑删除只是一种数据保护策略,不能完全替代物理删除。在某些情况下,如果数据已经过时或无用,应该进行物理删除以释放数据库资源和存储空间。因此,在使用逻辑删除时,需要根据实际情况综合考虑,选择合适的数据保护策略。
相关问题
数据库逻辑删除用法和代码
数据库逻辑删除是指在数据库中不直接删除数据,而是通过在数据中添加一个标记来表示该数据已被删除。这样可以保留原始数据并提高数据安全性。一般情况下,加上标记后的数据不会再对外显示,只在后台管理中可见。
以下是一个示例代码,展示如何使用数据库逻辑删除:
1. 首先,在数据表中添加一个名为 is_deleted 的布尔类型字段,用于标识数据是否被删除:
```sql
ALTER TABLE `table_name` ADD COLUMN `is_deleted` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '是否删除';
```
2. 在进行删除操作时,将 is_deleted 标记为 1:
```sql
UPDATE `table_name` SET `is_deleted` = 1 WHERE `id` = 1;
```
3. 在查询数据时,可以通过添加条件来过滤已被删除的数据:
```sql
SELECT * FROM `table_name` WHERE `is_deleted` = 0;
```
这样,我们就可以在数据库中实现逻辑删除功能了。
mybatis-plus插入数据和逻辑删除冲突
Mybatis-Plus插入数据和逻辑删除之间的冲突可能是由于使用了逻辑删除功能后插入数据时没有考虑到被逻辑删除的数据仍然存在于数据库中。在这种情况下,插入新数据时,可能会出现主键冲突或者唯一索引冲突的问题。
解决这个问题的一个方法是在插入数据时忽略掉逻辑删除的数据。可以通过在插入数据的SQL语句中使用WHERE子句来实现。例如:
```
INSERT INTO table_name (column1, column2, ...)
SELECT value1, value2, ...
FROM dual
WHERE NOT EXISTS (
SELECT * FROM table_name
WHERE deleted = 1 AND primary_key = 'xxx'
)
```
这个SQL语句会先判断是否已经存在被逻辑删除的数据,如果存在,则不进行插入操作。如果不存在,则插入新的数据。
另外,还可以通过在Mybatis-Plus的插件中自定义SQL拦截器来解决这个问题。具体的实现方式可以参考Mybatis-Plus官方文档中关于插件的介绍。