目录
11.1 视图概述
数据库中的视图是一个虚拟表,其数据是从一个或多个实体表中导出的。视图还可以从已经存在的视图的基础上定义。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作于对表的操作一样,可以对其进行查询、修改和删除。方队通过视图看到的数据进行修改时,相应的基本表数据也要发生裱花;同实,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
11.2 创建视图
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 查询语句
-- [WITH [CASCADED|LOCAL] CHECK OPTION] 表示视图再更新时保证再视图的权限范围之内
-- ALGORITHM
-- UNDEFINED 自动选择算法
-- MERGE 将使用的视图语句与视图定义结合起来,使得视图定义的某一部分取代语句对应的部分
-- TEMPTABLE 将视图的结果存入临时表,然后用临时表来执行语句
CASCADED 与 LOCAL 为可选参数,
CASCADED为默认值,表示更新视图时要满足所有相关视图和表的条件
LOCAL 表示更新视图时满足该视图本身定义的条件即可
该语句要求具有 针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,必须在视图上具有DROP权限。
11.2.2 在单表上创建视图
CREATE TABLE t (qty INT, price INT); /*创建基本表t*/
INSERT INTO t VALUES(3, 50); /*插入记录*/
CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM t; /*创建视图view_t*/
SELECT * FROM view_t;
CREATE VIEW view_t2(qty, price, total ) AS SELECT quantity, price, quantity *price FROM t;
SELECT * FROM view_t2;
11.2.3 在多表上创建视图
INSERT INTO student VALUES(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai'); /*插入记录*/
INSERT INTO stu_info VALUES(1, 'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong');
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;
SELECT * FROM stu_glass;
11.3 查看视图
DESCRIBE view_t;
SHOW TABLE STATUS LIKE 'view_t' \G;
SHOW TABLE STATUS LIKE 't' \G;
SHOW CREATE VIEW view_t \G;
SELECT * FROM information_schema.views \G;
11.4 修改视图
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
ALTER VIEW view_t AS SELECT quantity FROM t;
11.5 更新视图
SELECT * FROM view_t; /*查看更新之前的视图*/
SELECT * FROM t; /*查看更新之前的表*/
UPDATE view_t SET quantity=5; /*更新视图*/
SELECT * FROM t; /*查看更新之后的表*/
SELECT * FROM view_t; /*查看更新之后的视图*/
SELECT * FROM view_t2;
INSERT INTO t VALUES (3,5); /*基本表t中插入一条记录*/
SELECT * FROM t;
SELECT * FROM view_t2;
11.6 删除视图
DROP VIEW IF EXISTS stu_glass;