11.2创建视图

内容来自《MySQL从入门到精通》清华大学出版社一书的内容,随看书随打打笔记,会不断补充 

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

11.2.1创建视图的语法格式

创建视图使用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。

11.2.2在单表上创建视图

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

例:在t表格上创建一个名为view_t的视图

首先创建基本表并插入数据:

CREATE TABLE t(quantity INT,price INT)

INSERT INTO t VALUES(3,50)

           创建视图语句:

CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM t; 

执行语句如下:

11.2创建视图_第1张图片


也可以通过指定视图字段的名称来创建视图。

例:在t表格上创建一个名为view_t2的视图

CREATE VIEW view_t2(qty, price, total ) AS SELECT qty, price, qty *price FROM t;

执行过程

11.2创建视图_第2张图片

视图1和2中字段名称不同,但数据却是相同的。因此在使用视图的时候,可能用户根本不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

11.2.3在多表上创建视图

使用CREATE VIEW语句实现在多个表创建视图:

例:在表student和表stu_info上创建视图stu_glass

首先创建两张表

CREATE TABLE student
(
  s_id  INT,
  name  VARCHAR(40)
);

CREATE TABLE stu_info
(
  s_id   INT,
  glass  VARCHAR(40),
  addr   VARCHAR(90)
);

向其中插入数据

INSERT INTO student VALUES(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai');                /*插入记录*/
INSERT INTO stu_info VALUES(1, 'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong');

创建视图,筛选id,姓名和班级

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;

执行如下:

11.2创建视图_第3张图片

通过这个视图可以很好地保护基本表中的数据。

 

你可能感兴趣的:(MySQL)