为视图创建外键

时间:2016-06-30 02:29:19

标签: mysql phpmyadmin mariadb

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

这可能吗?如果是这样,这被认为是不好的做法吗?如果这不是,还有其他选择吗?它似乎无法通过phpmyadmin实现,我无法在视图上创建主键。

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

2 个答案:

答案 0 :(得分:1)

没有。这是不可能的。

请参阅MySQL Forums post

  

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

视图已实现。它们本身不是具有最左侧索引的表。视图也是及时的快照(创建时间)。他们可能会失去对当前架构的支持,在下次使用之前一直都不知道。因此,由于许多原因,他们不会将FK用作target引用,因为他们称之为。

来自手册页FAQ: Views

  

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

我称之为视图的快照的另一个原因。它在任何时间点的有效性都会受到严重影响。不是FK 引用的候选人。

答案 1 :(得分:0)

您可以创建另一个(共享)架构并将表移动到该架构,而不是使用视图。这使得您可以重用表而无需在受限制的模式上授予单个表权限。就像@Drew所说,由于无法在视图上创建索引,因此无法在视图上创建外键约束。