首页 > 编程笔记 > MySQL笔记 阅读:115

MySQL CREATE VIEW:创建视图(非常详细,附带实例)

视图是一张虚拟表,是从数据库中一张或多张表中导出来的表。视图还可以在已经存在的视图的基础上进行定义。在视图中用户可以使用 SELECT 语句查询数据,以及使用 INSERT、UPDATE 和 DELETE 修改记录。

视图中包含了 SELECT 查询的结果,因此视图的创建基于 SELECT 语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。本节主要介绍创建视图的方法。

MySQL创建视图的语法

创建视图使用 CREATE VIEW 语句,基本语法格式如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
各参数说明见下表:

参数 说明
CREATE 表示创建新的视图。
REPLACE 表示替换已经创建的视图。
ALGORITHM 表示视图选择的算法,取值有以下 3 种:
  • UNDEFINED 表示 MySQL 将自动选择算法。
  • MERGE 表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分。
  • TEMPTABLE 表示将视图的结果存入临时表,然后用临时表来执行语句。
view_name 为视图的名称,column_list 为属性列。
SELECT_statement 表示 SELECT 语句。
WITH [CASCADED | LOCAL] CHECK OPTION 表示视图在更新时保证在视图的权限范围之内。CASCADE 与 LOCAL 为可选参数,CASCADE 为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL 表示更新视图时满足该视图本身定义的条件即可。

创建视图语句要求具有针对视图的 CREATE VIEW 权限,以及针对由 SELECT 语句选择的每一列上的某些权限。对于在 SELECT 语句中其他地方使用的列,必须具有 SELECT 权限。如果还有 OR REPLACE 子句,则必须在视图上具有 DROP 权限。

视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为 db_name.view_name。

MySQL在单表上创建视图

MySQL 可以在单个数据表上创建视图。

【实例 1】在 t 表上创建一个名为 view_t 的视图,代码如下:
1) 首先创建基本表并插入数据,语句如下:
CREATE TABLE tv (quantity INT, price INT);
INSERT INTO tv VALUES(3, 50);
创建视图语句为:
CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM tv;
查询视图,执行如下:
mysql> SELECT * FROM view_t;
+----------+-------+-----------------+
| quantity | price | quantity *price |
+----------+-------+-----------------+
|     3    |   50  |         150     |
+----------+-------+-----------------+
默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

【实例 2】在 tv 表上创建一个名为 view_t2 的视图,代码如下:
mysql> CREATE VIEW view_t2(qty, price, total ) AS SELECT quantity, price, quantity *price FROM tv;
语句执行成功后,查看 view_t2 视图中的数据:
mysql> SELECT * FROM view_t2;
+------+-------+-------+
| qty  | price | total |
+------+-------+-------+
|   3  |   50  |  150  |
+------+-------+-------+
可以看到,view_t2 和 view_t 两个视图中的字段名称不同,但数据却是相同的。因此,在使用视图的时候,可能用户根本就不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

MySQL在多表上创建视图

MySQL 中也可以在两个或者两个以上的表上创建视图,可以使用 CREATE VIEW 语句实现。

【实例 3】在表 student 和表 stu_info 上创建视图 stu_glass,代码如下:
1) 首先向两个表中插入数据,输入语句如下:
mysql> INSERT INTO student VALUES(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai');
mysql> INSERT INTO stu_info VALUES(1, 'wuban','henan'),(2,'liuban','hebei'), (3,'qiban','shandong');

2) 创建视图 stu_glass,代码的执行如下:
mysql> CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,
student.name ,stu_info.glass FROM student ,stu_info WHERE student.s_id=stu_info.s_id;
mysql> SELECT * FROM stu_glass;
+------+----------+--------+
| id   | name     | glass  |
+------+----------+--------+
|    1 | wanglin1 | wuban  |
|    2 | gaoli    | liuban |
|    3 | zhanghai | qiban  |
+------+----------+--------+
本例中,通过视图可以很好地保护基本表中的数据。视图中的信息很简单,只包含了 id、姓名和班级,id 字段对应 student 表中的 s_id 字段,name 字段对应 student 表中的 name 字段,glass 字段对应 stu_info 表中的 glass 字段。

相关文章