在MySQL中使行无效

Arj*_*jen 7 php mysql sql

是否可以在MySQL中使一行无效?那么这一行不再用于查询结果了?我的客户希望保留已删除的成员存在于数据库中,但我不想编辑所有查询以检查成员是否被删除.

或者有一种简单的方法可以将整个行数据移动到另一个"非活动"表中吗?

Bri*_*per 10

您可以重命名当前表,在其中创建"已删除"列,然后创建一个与当前表同名的视图,选择所有删除的值= 0.这样您就不必更改所有查询.如果为删除列提供默认值,则视图将可更新._

CREATE TABLE my_new_table (col1    INTEGER,
                           col2    INTEGER,
                           col3    INTEGER,
                           deleted INTEGER NOT NULL DEFAULT 0);

INSERT INTO my_new_table (col1, col2, col3)
    SELECT (col1, col2, col3)
        FROM my_table;

DROP TABLE my_table;

CREATE VIEW my_table (col1, col2, col3)
    AS SELECT (col1, col2, col3)
           FROM my_new_table
           WHERE deleted = 0;
Run Code Online (Sandbox Code Playgroud)


Dan*_*llo 6

您描述的内容通常称为软删除.

在关系数据库中,在不同表之间移动行很少是个好主意.一般情况下,您不应仅仅因为某些关于它们的属性发生了变化而移动记录(在这种情况下,"不活动"只是一个属性).

我会inactive在表中添加一个字段,0如果该行处于活动状态,则将其设置为" 1无效".然而,你将不得不通过增加过滤掉所有的疑问不活动的行WHERE inactive = 0中的WHERE条款.另一种方法是使用视图,正如@Brian在其他答案中建议的那样,我建议使用.