视图只不过是存储在数据库中且具有关联名称的SQL语句,视图实际上是以预定义的SQL查询的形式组成的临时表。
创建视图
数据库视图是使用 CREATE VIEW 语句创建的,可以从单个表,多个表或另一个视图创建视图。
基本的 CREATE VIEW 语法如下-
CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
您可以像在普通SQL SELECT查询中使用多个表一样,在SELECT语句中包括多个表。
考虑具有以下记录的CUSTOMERS表-
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Learnfk | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
以下是从CUSTOMERS表创建视图的示例,该视图将用于在CUSTOMERS表中获得客户名称和年龄。
SQL > CREATE VIEW CUSTOMERS_VIEW AS SELECT name, age FROM CUSTOMERS;
现在,您可以通过查询实际表的类似方式查询CUSTOMERS_VIEW,以下是相同的示例。
SQL > SELECT * FROM CUSTOMERS_VIEW;
这将产生以下输出。
+----------+-----+ | name | age | +----------+-----+ | Ramesh | 32 | | Khilan | 25 | | kaushik | 23 | | Chaitali | 25 | | Hardik | 27 | | Komal | 22 | | Learnfk | 24 | +----------+-----+
WITH CHECK 选项
WITH CHECK OPTION是CREATE VIEW语句选项,WITH CHECK OPTION的目的是确保所有UPDATE和INSERT都满足视图定义中的条件。
如果它们不满足条件,则UPDATE或INSERT返回错误。
以下代码块提供了一个示例,该示例使用WITH CHECK OPTION创建相同的视图CUSTOMERS_VIEW。
CREATE VIEW CUSTOMERS_VIEW AS SELECT name, age FROM CUSTOMERS WHERE age IS NOT NULL WITH CHECK OPTION;
在这种情况下,WITH CHECK OPTION应该拒绝在视图的AGE列中输入任何NULL值,因为视图是由在AGE列中没有NULL值的数据定义的。
更新视图
以下代码块有一个示例来更新Ramesh的年龄。
SQL > UPDATE CUSTOMERS_VIEW SET AGE = 35 WHERE name = 'Ramesh';
这最终将更新基表CUSTOMERS,并且该内容将反映在视图本身中,现在,尝试查询基表,并且SELECT语句将产生以下输出。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 35 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Learnfk | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
视图插入行
可以将数据行插入到视图中,适用于UPDATE命令的相同规则也适用于INSERT命令。
在这里,无涯教程不能在CUSTOMERS_VIEW中插入行,因为无涯教程没有在该视图中包括所有的NOT NULL列,否则,您可以以与在表中插入行类似的方式在视图中插入行。
视图删除行
可以从视图中删除数据行,适用于UPDATE和INSERT命令的相同规则适用于DELETE命令。
以下是删除AGE=22的记录的示例。
SQL > DELETE FROM CUSTOMERS_VIEW WHERE age = 22;
最终,这将从基表CUSTOMERS中删除一行,并且该行将反映在视图本身中,现在,尝试查询基表,并且SELECT语句将产生以下输出。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 35 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 7 | Learnfk | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
删除视图
显然,在拥有视图的地方,如果不再需要该视图,则需要一种删除该视图的方法。语法非常简单,如下所示-
DROP VIEW view_name;
以下是从CUSTOMERS表中删除CUSTOMERS_VIEW的示例。
DROP VIEW CUSTOMERS_VIEW;