问题:我正在尝试在视图的列上创建外键。该视图是从另一个模式中的SELECT *
创建的,在我使用的列上具有主键约束。
这可能吗?如果是这样,这被认为是不好的做法吗?如果这不是,还有其他选择吗?它似乎无法通过phpmyadmin实现,我无法在视图上创建主键。
原因:我为两个不同的应用程序使用了两个架构,但是有一个用户'我希望在模式中重用的一个模式中的表(不一定是mysql.user表中的用户),而不授予其他模式的权限。这就是我使用视图的原因。
答案 0 :(得分:1)
没有。这是不可能的。
在引用的表中,必须有一个引用的索引 列列为第一列...
视图已实现。它们本身不是具有最左侧索引的表。视图也是及时的快照(创建时间)。他们可能会失去对当前架构的支持,在下次使用之前一直都不知道。因此,由于许多原因,他们不会将FK用作target
,引用,因为他们称之为。
来自手册页FAQ: Views
创建视图后,可以删除或更改表 或查看定义所指的内容。检查视图定义 这类问题,请使用CHECK TABLE语句。
我称之为视图的快照的另一个原因。它在任何时间点的有效性都会受到严重影响。不是FK 引用的候选人。
答案 1 :(得分:0)
您可以创建另一个(共享)架构并将表移动到该架构,而不是使用视图。这使得您可以重用表而无需在受限制的模式上授予单个表权限。就像@Drew所说,由于无法在视图上创建索引,因此无法在视图上创建外键约束。