首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有在数据库级别进行软删除的机制

是否有在数据库级别进行软删除的机制
EN

Stack Overflow用户
提问于 2018-03-22 13:34:27
回答 2查看 871关注 0票数 4

MySQLOracle中,是否有一种在数据库级别软删除的机制,例如:

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

2)在没有明确的where条件过滤掉软删除数据的情况下,所有的fetch查询都不会提取软删除数据。

3)所有update查询只触发未软删除的数据。

EN

回答 2

Stack Overflow用户

发布于 2018-03-22 14:05:58

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

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

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

老实说,我会把它构建到应用程序中。通常会涉及到很多业务逻辑(例如Smith先生已被软删除,但需要重新插入。根据一些隐私法,琼斯先生真的需要删除...)。

票数 3
EN

Stack Overflow用户

发布于 2018-03-22 13:38:18

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

对于查询,您可以设置一个仅显示未删除行的view。然后将普通的SELECT指向该视图,将需要处理软删除的行的SELECT指向底层表。

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

创建视图

代码语言:javascript
复制
CREATE VIEW my_active_stuff AS 
SELECT *
where deleted is null
FROM my_stuff_table;

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

代码语言:javascript
复制
SELECT *
FROM my_active_stuff
WHERE ...

您可以在the MySQL docs中阅读有关视图的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49421241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档