是否存在数据库级别的软删除机制

时间:2018-03-22 05:34:27

标签: mysql sql database oracle database-design

#import "MyWrapper.h" MySQL中是否存在数据库级别的软删除机制, 这样: -

1)所有删除查询软删除数据

2)所有获取查询都没有获取软删除数据,而没有任何明确的过滤掉软删除数据的条件。

3)所有更新查询仅针对尚未软删除的数据触发。

2 个答案:

答案 0 :(得分:3)

在Oracle中,有一个名为Workspace Manager的组件可以完成所有这些管道工作。

https://docs.oracle.com/database/121/ADWSM/long_intro.htm#ADWSM010

“Workspace Manager还在原始表()上创建视图,并在视图上创建INSTEAD OF触发器以进行插入,更新和删除操作。当应用程序执行语句以插入,更新或删除数据时启用版本的表,相应的INSTEAD OF触发器执行实际操作。当访问视图时,它使用工作空间元数据仅显示与用户当前工作空间相关的行版本。“

老实说,我将它构建到应用程序中。通常涉及很多商业逻辑(例如,史密斯先生被软删除,但需要再次插入。根据一些隐私法规,琼斯先生需要被真正删除......)。

答案 1 :(得分:1)

这些示例适用于MySQL,但相同的示例也适用于Oracle。

对于查询,您可以设置仅显示未删除行的view。然后将正常的SELECT指向该视图,并将需要处理软删除行的SELECT指向基础表。

我认为内置其他操作没有软删除支持。

创建视图

CREATE VIEW my_active_stuff AS 
SELECT *
where deleted is null
FROM my_stuff_table;

查询视图。仅返回未删除的行。

SELECT *
FROM my_active_stuff
WHERE ...

您可以在the MySQL docs中了解有关观看次数的更多信息。