sql-using-views
SQL - 使用视图
Section titled “SQL - 使用视图”在 SQL 中,视图是基于 SQL 语句结果集的虚拟表。视图包含行和列,就像真实的表一样。视图中的字段是数据库中一个或多个真实表中的字段。
可以将视图视为一个存储的查询,您可以像操作表一样与它交互。这提供了一种强大的抽象和安全机制。
使用视图的好处
Section titled “使用视图的好处”- 简洁性: 视图可以隐藏涉及多个联接的查询的复杂性。用户可以查询简单的视图,而无需自己编写复杂的联接。
- 安全性: 视图可用于只向用户公开特定的列和行,从而限制他们对底层基本表中敏感数据的访问。
- 一致性: 视图为您的数据提供了一致、稳定的接口。即使您重构底层表,也可以保持视图的结构,防止使用它的应用程序发生破坏性更改。
- 可读性: 一个命名良好的视图(例如,ActiveUsers、QuarterlySalesSummary)使查询更直观且具有自文档性。
数据库视图是使用 CREATE VIEW 语句创建的。
CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE [condition];让我们从 Customers 表创建一个名为 HighValueCustomers 的视图。此视图将只显示薪水大于 5000 的客户的姓名和城市。
CREATE VIEW HighValueCustomers ASSELECT Name, City, SalaryFROM CustomersWHERE Salary > 5000.00;现在,您可以像查询常规表一样查询此视图:
SELECT * FROM HighValueCustomersORDER BY Salary DESC;此查询将从我们原始的示例数据中仅返回包含 ‘Chaitali’、‘Hardik’ 和 ‘Muffy’ 的结果,而用户无需了解底层的过滤逻辑。
通过视图更新数据
Section titled “通过视图更新数据”某些视图是“可更新的”,这意味着您可以在它们上使用 INSERT、UPDATE 和 DELETE 语句,并且更改将传递到底层基本表。视图通常在以下情况下是可更新的:
- 它基于单个表。
- 它不使用 DISTINCT、聚合函数(SUM、COUNT 等)、GROUP BY 或 HAVING。
- 它不使用子查询或集合运算符(UNION 等)。
- 它包含基本表中所有非 NULL 且没有 DEFAULT 值的列(以便 INSERT 正常工作)。
WITH CHECK OPTION 子句
Section titled “WITH CHECK OPTION 子句”WITH CHECK OPTION 确保通过视图执行的任何 INSERT 或 UPDATE 操作都必须符合视图的 WHERE 子句。这可以防止用户以某种方式更新行,使其不再通过视图可见。
CREATE OR REPLACE VIEW HighValueCustomers ASSELECT Name, City, SalaryFROM CustomersWHERE Salary > 5000.00WITH CHECK OPTION;使用此选项,尝试 UPDATE HighValueCustomers SET Salary = 4000 WHERE Name = ‘Chaitali’ 将失败,因为新薪水 4000 不符合 WHERE Salary > 5000 的条件。
当不再需要视图时,可以使用 DROP VIEW 语句将其删除。这不会影响底层基本表中的数据。
DROP VIEW HighValueCustomers;