为视图创建外键

Create foreign key to a view

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

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

原因: 我为两个不同的应用程序使用了两个模式,但是有一个 'user' table(不一定是 mysql.user table) 在一个模式中,我想在不授予其他模式权限的情况下在该模式中重用。这就是我使用视图的原因。

没有。不可能。

请参阅MySQL Forums post

in the referenced table, there must be an index where the referenced columns are listed as the first columns ...

视图已具体化。它们本身不是具有最左侧索引的表。视图也是时间快照(创建时间)。它们可能会失去当前模式的支持,直到下次使用时才为人所知。因此,出于多种原因,他们不会像他们所说的那样成为 targetreferenced 的 FK 候选者。

来自手册页FAQ: Views

After a view has been created, it is possible to drop or alter a table or view to which the definition refers. To check a view definition for problems of this kind, use the CHECK TABLE statement.

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

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