mysql 视图 教程_MySQL 中的视图

本章我们将介绍MySQL 中的视图。

查看定义

视图 是来自一个或多个表的数据的特定外观。 它可以按特定顺序排列数据,突出显示或隐藏某些数据。 视图由存储的查询组成,该查询可作为由查询结果集组成的虚拟表访问。 与普通表不同,视图不构成物理模式的一部分。 它是根据数据库中的数据计算或整理的动态虚拟表。

视图是伪表。 它是一个存储查询,看起来像一个表。 它可以像表一样被引用。

视图可以将用户限制为特定的行或列,从而增强安全性。 它们可用于连接多个表中的列,使它们看起来像一个表。 它们可用于提供汇总信息。

有几个限制适用于视图。 这里是其中的一些:

SELECT 语句不能包含子查询

SELECT 语句不能引用系统或用户变量

定义中引用的任何表或视图都必须存在

无法创建临时视图

VIEW 不能与触发器关联

创建,修改和删除视图

在下一个示例中,我们创建一个简单的视图。 我们使用CREATE VIEW语法创建视图。

这是我们的数据,我们在该数据上创建视图。

我们创建一个视图CheapCars。 这些是价格低于 25000 的汽车。

视图是无法查询的数据库对象。 有三辆便宜的汽车。

我们可以重新定义视图。 假设我们现在认为如果汽车的价格低于 30000,则它会便宜。我们使用ALTER VIEW语句修改了我们的视图。

如果我们删除从中选择数据的表,对视图会发生什么?

查询视图时,我们收到上述错误。

当我们重新创建表时,视图将再次起作用。

最后,使用DROP VIEW语法删除视图。

寻找视图

我们将提到几种在 MySQL 数据库中查找视图的方法。

我们可以使用SHOW FULL TABLES语句列出数据库中的所有表。 在 Table_type 列中,我们可以看到它是表还是视图。

在 information_schema 数据库中,有一个TABLES表。 TABLE_NAME和TABLE_TYPE列为我们提供了有关表名及其类型的信息。

这是查找视图的最直接方法。 我们查询 information_schema 数据库的VIEWS表。

使用UNION创建视图

的UNION运算符用于结果集组合两个或更多SELECT语句。 每个选择必须具有相同的列数。

我们创建一个名为 FavoriteCars 的视图。 在此视图中,我们有三行被认为是最喜欢的。 三个SELECT语句与UNION运算符组合在一起。

这是视图中的SELECT。

### 回答1: MySQL 视图的限制包括: 1. 视图不能使用临时表 2. 视图不能包含 ORDER BY 子句,除非同时使用了 TOP 或 LIMIT 子句 3. 视图不能包含 INTO OUTFILE 或 INTO DUMPFILE 子句 4. 视图不能被索引,也不能被视为基表 5. 视图不能修改基表的数据,除非使用了特定的 WITH CHECK OPTION 子句 下面是一个 MySQL 视图限制的实例: 假设有一个名为 `orders` 的表,包含以下字段:`order_id`、`customer_id`、`order_date` 和 `total_amount`。 我们可以创建一个名为 `orders_view` 的视图,它只包含 `customer_id` 和 `total_amount` 这两个字段,如下所示: ``` CREATE VIEW orders_view AS SELECT customer_id, total_amount FROM orders; ``` 然而,我们不能在这个视图包含 ORDER BY 子句,否则会收到以下错误消息: ``` ERROR 1351 (HY000): View's SELECT contains a subquery in the FROM clause ``` 因此,我们应该在使用 ORDER BY 子句时,同时使用 TOP 或 LIMIT 子句来限制结果集的大小,如下所示: ``` CREATE VIEW orders_view AS SELECT customer_id, total_amount FROM orders ORDER BY total_amount DESC LIMIT 10; ``` 这样就可以避免上述错误。 ### 回答2: MySQL视图是虚拟的表,它是根据定义视图时指定的查询语句动态生成的,可以简化复杂的查询操作。然而,MySQL视图也有一些限制。 首先,MySQL视图不支持带有全局或本地临时表的查询。这意味着如果查询需要使用临时表,无法将其放在视图进行处理。 其次,MySQL视图不能索引。因为视图是根据查询结果动态生成的,而不是实际存储数据,所以无法为视图创建索引。这可能会导致在对视图进行复杂查询时性能下降。 此外,MySQL视图还有许多使用限制。例如,视图不能引用临时表、不能使用存储函数、不能使用用户变量,并且定义视图的SELECT语句不能包含DISTINCT关键字。 下面是一个关于MySQL视图限制的示例: 假设有一个名为"employees"的表,包含员工的姓名、年龄和工资信息。我们希望创建一个名为"young_employees"的视图,只包含年龄小于30岁的员工信息。 创建视图的语句可以是: CREATE VIEW young_employees AS SELECT * FROM employees WHERE age < 30; 然而,如果我们尝试在这个视图上使用DISTINCT关键字进行查询,就会遇到限制: SELECT DISTINCT * FROM young_employees; 会报错,因为MySQL不允许在视图的查询使用DISTINCT关键字。 综上所述,MySQL视图不支持临时表、无法索引、存在许多其他使用限制。在使用MySQL视图时,我们应该遵守这些限制并考虑它们可能带来的性能问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值