1.什么是视图
视图(View)是一种虚拟存在的表。其内容与真实的表相似,包含一系列带有名称的列和行数据。但是视图并不在数据库中以存储的数据的形式存在。行和列的数据来自定义视图时查询所引用的基本表,并且在具体引用视图时动态生成。
视图的特点如下:
<1> 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系;
<2> 视图是由基本表(实表)产生的表(虚表);
<3> 视图的建立和删除不影响基本表;
<4> 对视图内容的更新(增删改)直接影响基本表;
<5> 当视图来自多个基本表时,不允许添加和删除数据。
2.为什么使用视图
数据库中关于数据的查询有时候非常复杂,例如表连接、子查询等,逻辑复杂,编写语句比较多。当这种查询需要重复使用时,则不会次次都能编写正确,从而降低了数据库的实用性。
视图相对于普通的表的有时主要包括以下几项:
<1> 简单:使用视图的用户完全不需要关心视图中的数据是通过什么查询得到的,视图中的数据对用户来说已经是过滤好的符合条件的结果集;
<2> 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行或某个列,但是通过视图就可以简答地实现;
<3> 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,原表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
3.视图相关的MySQL指令
操作指令 | 代码 |
---|---|
创建视图 | CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...; |
使用视图 | 当成表使用就好 |
修改视图 | CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...]; |
查看数据库已有视图 | >SHOW TABLES [like...]; (可以使用模糊查找) |
查看视图详情 | DESC 视图名 或者SHOW FIELDS FROM 视图名 |
视图条件限制 | [WITH CHECK OPTION] |
4.创建视图
4.1 创建视图create view
CREATE VIEW 视图名(列1,列2...)
AS SELECT (列1,列2...)
FROM ...;
-- 创建一个查看用户信息和学习科目和分数视图 CREATE VIEW user_score(id,name,age,sex,subject,scote) AS SELECT u.id,name,age,sex,subject,score FROM `user` u INNER JOIN score s ON u.id = s.user_id;
或者这样创建(如果这个视图已经存在就替换掉)
-- 创建一个查看用户信息和学习科目和分数视图 CREATE OR REPLACE VIEW user_score AS SELECT u.id,name,sex,`subject`,score FROM `user` u INNER JOIN score s ON u.id = s.user_id
4.2视图运用
使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。
5.修改视图
CREATE OR REPLACE VIEW 视图名 AS SELECT [ ... ] FROM [ ... ];6.查看视图
6.1查看视图
查看数据库中有哪些视图 show tables
前面提到,视图就是虚拟的表,因此,查看视图的方法和查看表的方法是一样的
SHOW TABLES;
SHOW FULL TABLES 可以知道那个是视图,那个是表
6.2查看视图定义
查看视图详情的方法有两种,一种是和查看表详情一样使用desc 视图名
,另外一种方法是show fields from 视图名
:
DESC 视图名;
或者
SHOW FIELDS FROM 视图名;