创建视图

什么是视图

视图(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. );
  9. -- 'orders' 表中插入一些数据
  10. INSERT INTO orders (customer_id, order_date, order_amount)
  11. VALUES (1, '2023-01-01', 99.99),
  12. (1, '2023-01-03', 29.99),
  13. (2, '2023-01-03', 49.99),
  14. (3, '2023-01-05', 89.99),
  15. (1, '2023-01-07', 59.99),
  16. (2, '2023-01-07', 19.99);
  17. -- 创建一个名为 'order_summary' 的视图,它展示每个客户的总订单数量和总订单金额
  18. CREATE VIEW order_summary AS
  19. SELECT customer_id, COUNT(*) as order_count, SUM(order_amount) as total_amount
  20. FROM orders
  21. GROUP BY customer_id;
  22. -- 查询视图
  23. mysql> SELECT *
  24. FROM order_summary;
  25. +-------------+-------------+--------------+
  26. | customer_id | order_count | total_amount |
  27. +-------------+-------------+--------------+
  28. | 1 | 3 | 189.97 |
  29. | 2 | 2 | 69.98 |
  30. | 3 | 1 | 89.99 |
  31. +-------------+-------------+--------------+
  32. 3 rows in set (0.01 sec)