MySQL CREATE VIEW创建视图(附带实例)
MySQL 中的视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表。
视图中包含了 SELECT 查询的结果,因此视图的创建基于 SELECT 语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。
ALGORITHM 的取值有 3 个,分别是 UNDEFINED、MERGE、TEMPTABLE:
CASCADED 与 LOCAL 为可选参数,CASCADED 为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL 表示更新视图时满足该视图本身定义的条件即可。
该语句要求用户具有针对视图的 CREATE VIEW 权限,以及针对由 SELECT 语句选择的每一列上的某些权限。对于在 SELECT 语句中其他地方使用的列,必须具有 SELECT 权限。如果还有 OR REPLACE 子句,还必须在视图上具有 DROP 权限。
视图属于数据库对象。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为 db_name.view_name。
【实例 1】在 t 表上创建一个名为 view_t 的视图,代码如下:
1) 首先创建基本表并插入数据,语句如下:
【实例 2】在 tv 表上创建一个名为 view_t2 的视图,代码如下:
【实例】在表 student 和表 stu_info 上创建视图 stu_glass,代码如下:
1) 首先向两个表中插入数据,输入语句如下:
2) 创建视图 stu_glass,代码的执行如下:
视图中包含了 SELECT 查询的结果,因此视图的创建基于 SELECT 语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。
MySQL CREATE VIEW语句
创建视图使用 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 表示视图选择的算法;
- view_name 为视图的名称,column_list 为属性列;
- SELECT_statement 表示 SELECT 语句;
- WITH [CASCADED | LOCAL] CHECK OPTION 参数表示视图在更新时保证在视图的权限范围之内。
ALGORITHM 的取值有 3 个,分别是 UNDEFINED、MERGE、TEMPTABLE:
- UNDEFINED 表示 MySQL 将自动选择算法;
- MERGE 表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;
- TEMPTABLE 表示将视图的结果存入临时表,然后用临时表来执行语句。
CASCADED 与 LOCAL 为可选参数,CASCADED 为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL 表示更新视图时满足该视图本身定义的条件即可。
该语句要求用户具有针对视图的 CREATE VIEW 权限,以及针对由 SELECT 语句选择的每一列上的某些权限。对于在 SELECT 语句中其他地方使用的列,必须具有 SELECT 权限。如果还有 OR REPLACE 子句,还必须在视图上具有 DROP 权限。
视图属于数据库对象。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为 db_name.view_name。
在单表上创建视图
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 中也可以在两个或者两个以上的表上创建视图,可以使用 CREATE VIEW 语句实现。【实例】在表 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 字段。
相关文章
- MySQL创建视图(CREATE VIEW)
- MySQL CREATE INDEX语句创建索引(非常详细,附带实例)
- MySQL CREATE PROCEDURE创建存储过程的用法(非常详细)
- MySQL CREATE FUNCTION创建存储函数的用法(附带实例)
- MySQL SHOW CREATE TABLE:查看表详细结构(附带实例)
- MySQL创建数据库(CREATE DATABASE语句)
- MySQL创建数据表(CREATE TABLE语句)
- MySQL自定义函数(CREATE FUNCTION)
- MySQL创建触发器(CREATE TRIGGER)
- MySQL创建索引(CREATE INDEX)