Mysql 是否有数据库级的软删除机制

Mysql 是否有数据库级的软删除机制,mysql,sql,database,oracle,database-design,Mysql,Sql,Database,Oracle,Database Design,在MySQL和Oracle中是否有数据库级的软删除机制, 以便:- 1) 所有删除查询软删除数据 2) 如果没有筛选出软删除数据的任何显式where条件,则所有fetch查询都不会提取软删除数据 3) 所有更新查询只对未被软删除的数据发出。这些示例适用于MySQL,但同样的示例也适用于Oracle 对于查询,可以设置仅显示未删除行的。然后将您的普通SELECTs指向该视图,然后SELECTs也需要处理软删除行到基础表 我认为其他操作的内置操作不支持软删除 创建视图 CREATE VIEW my_

MySQL
Oracle
中是否有数据库级的软删除机制, 以便:-

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

2) 如果没有筛选出软删除数据的任何显式where条件,则所有fetch查询都不会提取软删除数据


3) 所有更新查询只对未被软删除的数据发出。

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

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

我认为其他操作的内置操作不支持软删除

创建视图

CREATE VIEW my_active_stuff AS 
SELECT *
where deleted is null
FROM my_stuff_table;
查询视图。仅返回未删除的行

SELECT *
FROM my_active_stuff
WHERE ...

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

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

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


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

可能重复的只是不允许删除。使用一个切换布尔标志(或类似标志)的更新。在应用层处理它。不要试图用一些神奇的SQL来完成这一切……包括它们的严重限制