内容来自《MySQL从入门到精通》清华大学出版社一书的内容,随看书随打打笔记,会不断补充
视图中包含了SELECT查询的结果,因此视图的创建基于SELECT语句和已存在的数据表,视图可建立在一张表上,也可以建立在多张表上。
创建视图使用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。
可以在单个数据表上创建视图。
例:在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;
执行语句如下:
也可以通过指定视图字段的名称来创建视图。
例:在t表格上创建一个名为view_t2的视图
CREATE VIEW view_t2(qty, price, total ) AS SELECT qty, price, qty *price FROM t;
执行过程
视图1和2中字段名称不同,但数据却是相同的。因此在使用视图的时候,可能用户根本不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。
使用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;
执行如下:
通过这个视图可以很好地保护基本表中的数据。