在MySQL和Oracle中,是否有一种在数据库级别软删除的机制,例如:
1)所有delete查询软删除数据
2)在没有明确的where条件过滤掉软删除数据的情况下,所有的fetch查询都不会提取软删除数据。
3)所有update查询只触发未软删除的数据。
发布于 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先生已被软删除,但需要重新插入。根据一些隐私法,琼斯先生真的需要删除...)。
发布于 2018-03-22 13:38:18
这些示例适用于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中阅读有关视图的更多信息。
https://stackoverflow.com/questions/49421241
复制相似问题