相关的文档10bet官方网站 本手册下载 本手册摘录

25.9视图限制

视图定义中可以引用的表的最大数量是61。

视图处理未优化:

  • 在视图上创建索引是不可能的。

  • 索引可以用于使用合并算法处理的视图。然而,使用temptable算法处理的视图不能利用其基础表上的索引(尽管在生成临时表期间可以使用索引)。

有一个普遍的原则是,您不能在子查询中修改一个表并从同一表进行选择。看到第13.2.11.12节,“子查询的限制”

同样的原则也适用于以下情况:从从表中选择的视图中进行选择;如果视图从子查询中的表中选择,并且使用合并算法对视图进行评估。例子:

SELECT * FROM t2 WHERE EXISTS (SELECT 1 FROM t1 WHERE t1;= t2.a);UPDATE t1, SET t1。a = 1 WHERE t1。b = v2.b;

如果使用临时表计算视图,则可以从视图子查询中的表中选择,并仍然在外部查询中修改该表。在这种情况下,视图存储在一个临时表中,因此您并不是在子查询中从表中进行选择并同时修改它。(这是您可能希望通过指定强制MySQL使用诱人算法的另一个原因算法=易被诱惑的在视图定义中。)

您可以使用删除表ALTER TABLE删除或更改视图定义中使用的表。没有警告结果下降改变,更改操作,即使这会使视图失效。相反,在稍后使用视图时将发生错误。检查表可用于检查视图已无效的下降改变,更改操作。

关于视图的可更新性,视图的总体目标是,如果任何视图在理论上是可更新的,那么它在实践中也应该是可更新的。MySQL尽快。许多理论上可更新的视图现在都可以更新了,但局限性仍然存在。有关详细信息,请参见第25.5.3节,“可更新和可插入的视图”

目前的视图实现存在缺陷。如果用户被授予创建视图所需的基本权限(即创建视图选择权限),该用户不能调用显示创建视图除非用户也被授予显示视图特权。

这个缺点可能会导致备份数据库时出现问题, mysqldump,可能会由于权限不足而失败。此问题在Bug #22062中描述。

此问题的解决方案是由管理员手动授予显示视图被授予用户的特权创建视图,因为MySQL在创建视图时不会隐式授予它。

视图没有索引,因此不适用索引提示。在视图中进行选择时,不允许使用索引提示。

显示创建视图控件显示视图定义作为alias_name子句为每一列。如果列是从表达式创建的,则默认别名是表达式文本,这可能相当长。中列名的别名创建视图语句将根据最大列长度64个字符(而不是最大别名长度256个字符)进行检查。的输出创建视图显示创建视图如果任何列别名超过64个字符,则失败。对于别名太长的视图,在以下情况下可能会导致问题:

  • 未能将视图定义复制到执行列长度限制的较新的副本。

  • 转储使用, mysqldump无法加载到强制列长度限制的服务器中。

解决这两个问题的一个方法是修改每个有问题的视图定义,以使用提供更短列名的别名。然后正确地复制视图,并可以转储和重新加载而不会导致错误。要修改定义,请删除并再次创建视图删除视图创建视图,或将定义替换为创建或替换视图

对于在转储文件中重新加载视图定义时出现的问题,另一个解决方案是编辑转储文件以修改其创建视图语句。但是,这不会改变原始的视图定义,这可能会给后续的转储操作带来问题。