MySQL - 我可以阻止一行被选中吗?

时间:2014-08-11 16:42:37

标签: php mysql sql web

我有一个表,有很多不同的查询。

我想添加一项功能,允许我基本上禁用指定的行,以便它们不会显示在网站的任何位置。

现在,显而易见的解决方案是创建一个新列,并在网站上的每个AND ACTIVE=TRUE查询中添加“SELECT”。但是,有许多不同的SELECT查询,追捕每一个查询都是非常不切实际的。我一定会想念一些。

是否有更实用的方法来禁用行?

2 个答案:

答案 0 :(得分:4)

考虑创建一个视图,从您的表中选择所有列,但在您按照问题中的建议创建ACTIVE = TRUE列后应用条件ACTIVE。如果您重命名原始表并使用表的原名创建视图,则可以在应用新限制条件的情况下无缝地在应用程序中使用它。

CREATE VIEW the_table_name AS (
  SELECT
    col1,
    col2,
    col3
  FROM the_renamed_table
  WHERE ACTIVE = TRUE
);

如果性能似乎无法扩展,您可能需要在ACTIVE列上添加索引。

答案 1 :(得分:1)

MySQL无法在行级别设置访问权限。你必须用PHP来做。如果您使用的是数据库抽象层,例如Doctrine,则可以快速实现此类功能。如果您的所有查询都直接写在代码中,那么您就不幸了。