> For the complete documentation index, see [llms.txt](https://hezhiqiang-book.gitbook.io/mysql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hezhiqiang-book.gitbook.io/mysql/di-wu-zhang/shi-xian-he-xian-zhi.md).

# 实现和限制

在本教程中，您将了解MySQL视图，我们将解释并演示MySQL如何实现视图。

*MySQL 5.x* 版本之后支持数据库视图。 在MySQL中，视图的几乎特征符合SQL：2003标准。 MySQL以两种方式处理对视图的查询：

* *第一种方式*，MySQL会根据视图定义语句创建一个[临时表](http://www.yiibai.com/mysql/temporary-table.html)，并在此临时表上执行传入查询。
* *第二种方式*，MySQL将传入查询与查询定义为一个查询并执行组合查询。

MySQL支持版本系统的视图。每次[视图被更改或替换](http://www.yiibai.com/mysql/managing-sql-views.html)时，视图的副本将在驻留在特定数据库文件夹的`arc`(archive)文件夹中备份。备份文件的名称为`view_name.frm-00001`。如果再次更改视图，MySQL将创建一个名为`view_name.frm-00002`的新备份文件。

MySQL允许基于其他视图创建视图。在视图定义的[SELECT语句](http://www.yiibai.com/mysql/select-statement-query-data.html)中，可以引用另一个视图。

## MySQL视图的限制

不能在视图上创建[索引](http://www.yiibai.com/mysql/create-drop-index.html)。当使用合并算法的视图查询数据时，MySQL会使用底层表的索引。对于使用诱惑算法的视图，当您针对视图查询数据时，不会使用索引。

在*MySQL 5.7.7*之前版本，是不能在`SELECT`语句的`FROM`子句中使用[子查询](http://www.yiibai.com/mysql/subquery/)来定义视图的。

如果删除或[重命名](http://www.yiibai.com/mysql/rename-table.html)视图所基于的表，则MySQL不会发出任何错误。但是，MySQL会使视图无效。 可以使用`CHECK TABLE`语句来检查视图是否有效。

一个简单的视图可以[更新](http://www.yiibai.com/mysql/create-sql-updatable-views.html)表中数据。基于具有[连接](http://www.yiibai.com/mysql/inner-join.html)，子查询等的复杂SELECT语句创建的视图无法更新。

MySQL不像：[Oracle](http://www.oraok.com/)，[PostgreSQL](http://www.yiibai.com/postgresql/)等其他数据库系统那样支持物理视图，MySQL是不支持物理视图的。
