问题:我想创建一个外键到视图的列。从我使用的列上的主键约束的另一个模式,该视图是SELECT *
。创建一个视图的外键
这可能吗?如果是这样,这被认为是不好的做法?如果不是这样,是否有其他选择?它似乎不可能通过phpmyadmin,我不能在视图上创建主键。
原因:我对两个不同的应用程序使用了两个模式,但是在一个架构中有一个'user'表(不一定是mysql.user表中的用户),我希望在模式中重用授予其他模式的权限。这就是我使用视图的原因。
问题:我想创建一个外键到视图的列。从我使用的列上的主键约束的另一个模式,该视图是SELECT *
。创建一个视图的外键
这可能吗?如果是这样,这被认为是不好的做法?如果不是这样,是否有其他选择?它似乎不可能通过phpmyadmin,我不能在视图上创建主键。
原因:我对两个不同的应用程序使用了两个模式,但是在一个架构中有一个'user'表(不一定是mysql.user表中的用户),我希望在模式中重用授予其他模式的权限。这就是我使用视图的原因。
不,这是不可能的。
在引用表,必有所参考 列被列为第一列的索引...
视图是物化。他们本身并不是最左边索引的表格。视图也是时间快照(创建时间)。他们可能会失去当前模式的青睐,直到下一次使用才知道。因此,由于许多原因,他们不会将FK用作target
,,因为他们称之为。
从手册FAQ: Views
的视图创建后,可以删除或修改一个表 或视图到的定义是指。要检查 这种问题的视图定义,请使用CHECK TABLE语句。
进一步的原因为什么一个视图是我称之为快照的。其在任何时间点的有效性都可能变得高度受损。不是FK 参考候选人。
除了使用视图外,还可以创建另一个(共享)模式并将表移动到该模式。这使得它可以在不授予受限模式的单个表权限的情况下重用表。就像@Drew说的那样,不可能在视图上创建外键约束,因为你不能在视图上创建索引。
无论迂腐分歧,这是你的问题的唯一答案。 – Drew
道歉,我还没有意识到MySQL中的所有视图都是'快照',直到进一步研究。我来自Oracle DB背景。 – Mocking