MySQL 如何创建MySQL视图?

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程