【问题标题】:Create foreign key to a view为视图创建外键
【发布时间】:2016-11-01 22:51:43
【问题描述】:

问题:我正在尝试在视图的列上创建外键。该视图是来自另一个模式的SELECT *,在我正在使用的列上具有主键约束。

这可能吗?如果是这样,这是否被认为是不好的做法?如果不是这样,是否有替代方案?好像不能通过phpmyadmin,也不能在视图上创建主键。

原因:我为两个不同的应用程序使用了两个架构,但是我想重用一个架构中有一个“用户”表(不一定是 mysql.user 表中的用户)在架构中而不授予其他架构的权限。这就是我使用视图的原因。

【问题讨论】:

    标签: mysql phpmyadmin mariadb


    【解决方案1】:

    没有。这是不可能的。

    请参阅MySQL Forums post

    在被引用的表中,必须有被引用的索引 列被列为第一列...

    视图被具体化。它们本身不是带有最左侧索引的表。视图也是时间(创建时间)的快照。他们可能会失去对当前模式的青睐,直到下次使用时才知道。因此,由于许多原因,它们不会成为 FK 的候选对象,如他们所说的 target,即 引用

    来自手册页FAQ: Views

    创建视图后,可以删除或更改表 或定义所指的视图。检查视图定义 此类问题,请使用 CHECK TABLE 语句。

    视图是我所说的快照的进一步原因。它在任何时间点的有效性都可能受到严重影响。不是 FK引用 候选人。

    【讨论】:

    • 不管学究式的分歧如何,这是您问题的唯一答案。
    • 抱歉,直到进一步研究,我才意识到 MySQL 中的所有视图都是“快照”。我来自 Oracle 数据库背景。
    【解决方案2】:

    您可以创建另一个(共享)架构并将表移至该架构,而不是使用视图。这使得您可以重用这些表,而无需授予对受限模式的单个表权限。就像@Drew 说的那样,不可能在视图上创建外键约束,因为您不能在视图上创建索引。

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 2018-10-07
      • 2012-07-11
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 2015-01-04
      相关资源
      最近更新 更多