Skip to content

创建视图

什么是视图

视图(View)是一个基于 SQL 语句的结果集的可视化、只读的虚拟表,其内容由查询定义。与普通表(存储数据的表)不同,视图不包含数据,仅仅是基于基表(被查询的表)的查询结果的格式化显示。你可以把视图看作是一张表的窗口,这个窗口中的数据反映在其他表上。当查询视图时,数据库会将该视图的 SQL 查询应用到其基础表上。

视图的优点

  • 简化查询:对于复杂的查询,可以创建视图来隐藏查询的复杂性,只需要从视图中选择数据,而不需要记住复杂的查询语句。

  • 增加额外的安全层:视图可以限制用户访问某些数据库字段,只展示他们需要看到的字段,这样可以保护数据的安全。

  • 保持数据一致性:如果多个查询需要用到相同的查询子句,那么创建视图可以保持数据一致性。

  • 逻辑抽象:视图可以表示基表数据的有用部分,或者汇总,以及从几个表组合而来的信息。

但是视图也有缺点:

  • 性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。

  • 依赖其他表:将根据数据库的基础表创建一个视图。并不是所有的视图都支持对数据进行更新,这主要取决于视图的定义以及它的基础表。

开始前准备

在阅读本页面之前,你需要准备以下事项:

  • 了解并已经完成构建 MatrixOne 集群。
  • 了解什么是数据库模式

如何使用视图

创建视图的语法如下:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

创建视图后,你可以像查询其他表一样查询视图:

SELECT column1, column2, ...
FROM view_name;

示例

-- 创建一个名为 'orders' 的表
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT,
    customer_id INT,
    order_date DATE,
    order_amount DOUBLE,
    PRIMARY KEY (order_id)
);

-- 向 'orders' 表中插入一些数据
INSERT INTO orders (customer_id, order_date, order_amount)
VALUES (1, '2023-01-01', 99.99),
       (1, '2023-01-03', 29.99),
       (2, '2023-01-03', 49.99),
       (3, '2023-01-05', 89.99),
       (1, '2023-01-07', 59.99),
       (2, '2023-01-07', 19.99);

-- 创建一个名为 'order_summary' 的视图,它展示每个客户的总订单数量和总订单金额
CREATE VIEW order_summary AS
SELECT customer_id, COUNT(*) as order_count, SUM(order_amount) as total_amount
FROM orders
GROUP BY customer_id;

-- 查询视图
mysql> SELECT *
FROM order_summary;
+-------------+-------------+--------------+
| customer_id | order_count | total_amount |
+-------------+-------------+--------------+
|           1 |           3 |       189.97 |
|           2 |           2 |        69.98 |
|           3 |           1 |        89.99 |
+-------------+-------------+--------------+
3 rows in set (0.01 sec)