视图是从一个或多个表中导出的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。这样,用户可以不用看到整个数据库表中的数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
视图是存储在数据库中的查询的SQL语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,例如,员工信息表,可以用视图只显示姓名、工龄、地址,而不显示社会保险号和工资数等;另一个原因是可使复杂的查询易于理解和使用。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。下面将视图的作用归纳为如下几点:
创建视图是指在已经存在的数据库表上建立视图,视图可以建立在一张表中,也可以建立在多张表中。
创建视图需要具有CREATE VIEW的权限,同时应该具有查询涉及的列的SELECT权限。可以使用SELECT语句来查询这些权限信息,查询语法如下:
SELECT Selete_priv,Create_view_priv FROM mysql.user WHERE user='用户名';
Selete_priv属性表示用户是否具有SELECT权限,Y表示拥有SELECT权限,N表示没有。Create_view_priv属性表示用户是否具有CREATE VIEW权限;mysql.user表示MySQL数据库下面的user表。MySQL中,创建视图是通过CREATE VIEW语句实现的,其语法如下:
CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名[(属性清单)]
AS SELECT语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
示例:
CREATE VIEW
book_view1(a_sort,a_talk,a_books)
AS SELECT sort,talk,books
FROM tb_book;
创建视图时需要注意以下几点:
查看视图是指查看数据库中已存在的视图。查看视图必须要有SHOW VIEW的权限。查看视图的方法主要包括DESCRIBE语句、SHOW TABLE STATUS语句、SHOW CREATE VIEW语句等。
DESCRIBE可以缩写成DESC,其语法格式如下:
DESCRIBE 视图名;
如果只需了解视图中的各个字段的简单信息,可以使用DESCRIBE语句。DESCRIBE语句查看视图的方式与查看普通表的方式是相同的,结果显示的方式也相同。通常情况下,都是使用DESC代替DESCRIBE。
在MySQL中,可以使用SHOW TABLE STATUS语句查看视图的信息,其语法格式如下:
SHOW TABLE STATUS LIKE '视图名';
在MySQL中,SHOW CREATE VIEW语句可以查看视图的详细定义,其语法格式如下:
SHOW CREATE VIEW 视图名;
修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。MySQL中通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。
在MySQL中,CREATE OR REPLACE VIEW语句可以用来修改视图。该语句的使用非常灵活。在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。
CREATE OR REPLACE VIEW语句的语法如下:
CREATE OR REPLACE [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图[(属性清单)]
AS SELECT 语句
[WITH [CASCADED | LOCAL] CHECK OPTION];
ALTER VIEW语句改变了视图的定义,包括被索引视图,但不影响所依赖的存储过程或触发器。该语句与CREATE VIEW语句有着同样的限制,如果删除并重建了一个视图,就必须重新为它分配权限。
ALTER VIEW语句的语法如下:
alter view [algorithm={merge | temptable | undefined} ]view view_name [(column_list)] as select_statement[with
[cascaded | local] check option]
在创建视图时,在使用了WITH CHECK OPTION, WITH ENCRYPTION,WITH SCHEMABING或VIEW_METADATA选项时,如果想保留这些选项提供的功能,必须在ALTER VIEW语句中将它们包括进去。
对视图的更新其实就是对表的更新,更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟表,其中没有数据。通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内的数据,超出了范围,就不能更新。
并不是所有的视图都可以更新,以下几种情况是不能更新视图的:
CREATE VIEW book_view1(a_sort,a_book)
AS SELECT sort,books, COUNT(name) FROM tb_book;
CREATE VIEW book_view1(a_sort,a_book)
AS SELECT sort,books, FROM tb_book GROUP BY id;
CREATE VIEW book_view1
AS SELECT 'Aric' as a_book;
CREATE VIEW book_view1(a_sort)
AS SELECT (SELECT name FROM tb_book);
CREATE VIEW book_view1
AS SELECT * FROM book_view2;
CREATE ALGORITHM=TEMPTABLE
VIEW book_view1
AS SELECT * FROM tb_book;
视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,可能会造成数据更新失败。
删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。MySQL中,使用DROP VIEW语句来删除视图。但是,用户必须拥有DROP权限。
DROP VIEW语句的语法如下。
DROP VIEW IF EXISTS <视图名> [RESTRICT | CASCADE]
该语句从数据字典中删除指定的视图定义;如果该视图导出了其他视图,则使用CASCADE级联删除,或者先显式删除导出的视图,再删除该视图;删除基表时,由该基表导出的所有视图定义都必须显式删除。
上一篇:第85分钟钟文破门+滑跪庆祝,U19国青1-0领先印尼! 第85分钟钟文破门 滑跪庆祝,U19国青1-0领先印尼!
下一篇:江浙沪“宝女”留美惨遭裁员,确诊抑郁后,爸妈一个决定让她重获新生...... 江浙沪“宝女”留美惨遭裁员,确诊抑郁后,爸妈一个决定让她重获新生......