MySQL 如何创建MySQL视图?
使用CREATE VIEW语句可以创建MySQL视图。视图可以从单个表、多个表或另一个视图创建。我们知道,要创建视图,用户必须根据特定实现具有适当的系统特权。
基本的 CREATE VIEW 语法如下-
阅读更多:MySQL 教程
语法
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
在这里,
- CREATE VIEW- 该语句创建一个新视图。
-
View_name- view_name是视图的名称。视图始终属于一个数据库。默认情况下,新视图是在当前使用的数据库中创建的。
-
Select_statement- select_statement是一个SELECT语句,提供了视图的定义。select_statement可以从基本表或其他视图中选择数据。
-
Column_list- column_list部分是可选的。它在视图名称后立即为视图的列提供名字列表,其中名称必须是唯一的。column_list中的名称数量必须与SELECT语句检索的列的数量相同。如果我们想要给视图列取一个不同的名称,可以在select列表中添加[AS name]子句来实现。
-
OR REPLACE- 如果使用CREATE VIEW语句添加可选的OR REPLACE子句,则CREATE VIEW语句将替换现有视图并创建一个新视图。如果视图不存在,则CREATE VIEW与CREATE OR REPLACE VIEW相同。
-
ALGORITHM- ALGORITHM子句是可选的,它会影响MySQL处理视图的方式。算法有三个值:MERGE、TEMPTABLE或UNDEFINED。默认算法是UNDEFINED。
-
[DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] –
DEFINER和SQL SECURITY子句在视图调用时指定用于检查访问权限的安全上下文。如果指定DEFINER子句,则以下规则确定合法的DEFINER用户值-
- 如果您没有SUPER特权,则唯一合法的用户值是您自己的帐户,您不能将定义者设置为其他帐户。
-
如果您拥有SUPER特权,则可以指定任何语法上合法的帐户名。
在定义了具有SQL SECURITY DEFINER特性的存储过程内部,CURRENT_USER返回该过程的DEFINER值。如果视图定义包含CURRENT_USER的DEFINER值,则这也会影响在这样的过程内部定义的视图。
- 8. [WITH [CASCADED | LOCAL] CHECK OPTION] – 对于可更新的视图,可以给出WITH CHECK OPTION子句,以防止插入或更新行,除非在select_statement中的WHERE子句为true。在可更新视图的WITH CHECK OPTION子句中,LOCAL和CASCADED关键字确定在基于另一个视图定义视图时检查测试的范围。LOCAL关键字将CHECK OPTION限制为仅定义的视图。CASCADED使基础视图的检查也要进行评估。当没有给出关键字时,默认值为CASCADED。
示例
在此示例中,我们将在名为“Customers”的表上创建一个名为First_View的视图,其数据如下 –
mysql> Select * from Customers;
+-------------+----------+
| Customer_Id | Name |
+-------------+----------+
| 1 | Rahul |
| 2 | Yashpal |
| 3 | Gaurav |
| 4 | Virender |
+-------------+----------+
4 rows in set (1.30 sec)
mysql> Create view first_view AS SELECT * FROM Customers;
Query OK, 0 rows affected (0.36 sec)
现在,如果我们使用视图的名称运行查询,那么我们将从创建它的表中获取详细信息。
mysql> Select * from first_view;
+-------------+----------+
| Customer_Id | Name |
+-------------+----------+
| 1 | Rahul |
| 2 | Yashpal |
| 3 | Gaurav |
| 4 | Virender |
+-------------+----------+
4 rows in set (0.13 sec)