2016-06-30 65 views
2

问题:我想创建一个外键到视图的列。从我使用的列上的主键约束的另一个模式,该视图是SELECT *创建一个视图的外键

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

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

回答

1

不,这是不可能的。

请参阅MySQL Forums post

在引用表

,必有所参考 列被列为第一列的索引...

视图是物化。他们本身并不是最左边索引的表格。视图也是时间快照(创建时间)。他们可能会失去当前模式的青睐,直到下一次使用才知道。因此,由于许多原因,他们不会将FK用作target,,因为他们称之为

从手册FAQ: Views

的视图创建后,可以删除或修改一个表 或视图到的定义是指。要检查 这种问题的视图定义,请使用CHECK TABLE语句。

进一步的原因为什么一个视图是我称之为快照的。其在任何时间点的有效性都可能变得高度受损。不是FK 参考候选人。

+1

无论迂腐分歧,这是你的问题的唯一答案。 – Drew

+0

道歉,我还没有意识到MySQL中的所有视图都是'快照',直到进一步研究。我来自Oracle DB背景。 – Mocking

0

除了使用视图外,还可以创建另一个(共享)模式并将表移动到该模式。这使得它可以在不授予受限模式的单个表权限的情况下重用表。就像@Drew说的那样,不可能在视图上创建外键约束,因为你不能在视图上创建索引。