MySql软删除

Ale*_*lex 0 mysql

我有一个现有的应用程序(使用MySQL DB).

我刚刚得到一个新的要求,我需要从主要实体中删除一些记录.我不想在这里应用硬删除作为整个应用程序的风险.如果我使用软删除,我必须添加另一个字段is_deleted,因为我必须更新我的所有查询(例如is_deleted ='0').

如果有更智能的方法来处理这种情况,请告诉我.如果我引入一个新标志来处理删除,我必须在一半的查询中进行更改.

dan*_*era 5

您的应用程序无需任何更改即可运行 MySQL 符合ANSI-SPARC体系结构.使用外部模式,您可以实现codd的规则9"逻辑数据独立性":

对逻辑级别(表,列,行等)的更改不得要求基于结构更改应用程序.逻辑数据独立性比物理数据独立性更难实现.

您可以重命名表并使用原始表名创建视图.一个样品:

让我们来一个名为的表my_data:

REMAME TABLE my_data TO my_data_flagged

ALTER TABLE my_data_flagged 
   ADD COLUMN is_deleted boolean NOT NULL default 0;

CREATE VIEW my_data AS 
   SELECT * 
   FROM my_data_flagged 
   WHERE  is_deleted = '0'
Run Code Online (Sandbox Code Playgroud)

另一种方法是创建一个触发器并在独立表中复制已擦除的行.