创建视图
什么是视图
视图(View)是一个基于 SQL 语句的结果集的可视化、只读的虚拟表,其内容由查询定义。与普通表(存储数据的表)不同,视图不包含数据,仅仅是基于基表(被查询的表)的查询结果的格式化显示。你可以把视图看作是一张表的窗口,这个窗口中的数据反映在其他表上。当查询视图时,数据库会将该视图的 SQL 查询应用到其基础表上。
视图的优点
- 简化查询:对于复杂的查询,可以创建视图来隐藏查询的复杂性,只需要从视图中选择数据,而不需要记住复杂的查询语句。
- 增加额外的安全层:视图可以限制用户访问某些数据库字段,只展示他们需要看到的字段,这样可以保护数据的安全。
- 保持数据一致性:如果多个查询需要用到相同的查询子句,那么创建视图可以保持数据一致性。
- 逻辑抽象:视图可以表示基表数据的有用部分,或者汇总,以及从几个表组合而来的信息。
但是视图也有缺点:
- 性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
- 依赖其他表:将根据数据库的基础表创建一个视图。并不是所有的视图都支持对数据进行更新,这主要取决于视图的定义以及它的基础表。
开始前准备
在阅读本页面之前,你需要准备以下事项:
- 了解并已经完成构建 MatrixOne 集群。
- 了解什么是数据库模式。
如何使用视图
创建视图的语法如下:
1. CREATE VIEW view_name AS
2. SELECT column1, column2, ...
3. FROM table_name
4. WHERE condition;
创建视图后,你可以像查询其他表一样查询视图:
1. SELECT column1, column2, ...
2. FROM view_name;
示例
1. -- 创建一个名为 'orders' 的表
2. CREATE TABLE orders (
3. order_id INT AUTO_INCREMENT,
4. customer_id INT,
5. order_date DATE,
6. order_amount DOUBLE,
7. PRIMARY KEY (order_id)
8. );
10. -- 向 'orders' 表中插入一些数据
11. INSERT INTO orders (customer_id, order_date, order_amount)
12. VALUES (1, '2023-01-01', 99.99),
13. (1, '2023-01-03', 29.99),
14. (2, '2023-01-03', 49.99),
15. (3, '2023-01-05', 89.99),
16. (1, '2023-01-07', 59.99),
17. (2, '2023-01-07', 19.99);
19. -- 创建一个名为 'order_summary' 的视图,它展示每个客户的总订单数量和总订单金额
20. CREATE VIEW order_summary AS
21. SELECT customer_id, COUNT(*) as order_count, SUM(order_amount) as total_amount
22. FROM orders
23. GROUP BY customer_id;
25. -- 查询视图
26. mysql> SELECT *
27. FROM order_summary;
28. +-------------+-------------+--------------+
29. | customer_id | order_count | total_amount |
30. +-------------+-------------+--------------+
31. | 1 | 3 | 189.97 |
32. | 2 | 2 | 69.98 |
33. | 3 | 1 | 89.99 |
34. +-------------+-------------+--------------+
35. 3 rows in set (0.01 sec)
