- 1 为什么使用视图
-
数据库中关于数据的查询有时候非常复杂,例如表连接、子查询等,这种查询会让程序员感到非常痛苦,应为它逻辑太复杂、编写语句比较多。当这种查询需要重复使用时,则不会次次都能编写正确,从而降低了数据库的实用性。在具体操作表之前,有时候要求只能操作部分字段,而不是全部字段。例如
在公司员工的工资一般是保密的,如果因为程序员一时疏忽向查询中写入了关于“工资”的字符按,则会让员工的“工资”显示给所有能够查看该查询的人,这是就需要限制程序员操作的字段。
-
为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提高了视图特性。所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和行数据,但是,视图并不在数据库中以存储的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。
-
视图使程序员只关心感兴趣的某些特定数据和他们所负责的特定任务,这样程序员只能看到视图中所定义的数据,而不是视图所引用表中的数据,从而提高了数据库中数据的安全性。
-
视图的特点如下
- 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系
- 视图是由基本表(实表)产生的表(虚表)
- 视图的建立和删除不影响基本表
- 对视图内容的更新(添加、删除和修改)直接影响基本表
- 当视图来自多个基表时,不允许添加和删除数据
- 2 创建视图
-
2.1 创建视图的语法形式
-
和创建表一样,视图名不能和表名,也不能和其他的视图名重名。根据上述语法可以发现,视图的功能实际上就是封装了复杂的查询语句。
-
注意:在SQL语句命名规范中,视图一般以view_xxx或者v_xxx的样式来命名
-
2.2 创建各种视图
- 学生表信息(t_student)
- 组表信息
id | name | sex | group_id |
---|---|---|---|
1 | cjgong1 | M | 1 |
2 | cjgong2 | M | 1 |
3 | cjgong3 | M | 2 |
4 | cjgong4 | W | 2 |
5 | cjgong5 | W | 2 |
6 | cjgong6 | W | 2 |
7 | cjgong7 | M | 3 |
8 | cjgong8 | W | 3 |
9 | cjgong9 | W | 4 |
id | name |
---|---|
1 | group_1 |
2 | group_2 |
3 | group_3 |
4 | group_4 |
5 | group_5 |
CREATE VIEW view_test1
AS
SELECT 3.1415926
CREATE VIEW view_test2
AS
SELECT COUNT(name)
FROM t_student;
CREATE VIEW view_test3
AS
SELECT name
FROM t_student
ORDER BY id DESC;
CREATE VIEW view_test4
AS
SELECT s.name
FROM t_student AS s, t_gruop AS g
WHERE s.group_id = g.id AND g.id = 2;
CREATE VIEW view_test5
AS
SELECT s.name
FROM t_student AS s LEFT JOIN t_group AS g ON s.group_id = g.id
WHERE g.id = 2;
CREATE VIEW view_test6
AS
SELECT s.name
FROM t_student AS s
WHERE s.group_id IN(SELECT id FROM t_group);
CREATE VIEW view_test7
AS
SELECT id,name FROM t_student
UNION ALL
SELECT id,name FROM t_group;
- 3 查看视图
- 3.1 SHOW TABLES 语句查看视图名
-
3.2 SHOW TABLE STATUS [FROM] [LIKE] 语句查看视图详细信息
-
3.3 SHOW CREATE VIEW 语句查看实体定义信息
-
3.4 DESCRIBE | DESC| 语句查看实体设计信息
- 4删除视图
-
4.1 删除视图的语句形式
-
在上述语句中,view_name参数表示所要删除视图的名称
- 5修改视图
- 对于已经创建好的表,尤其是已经有大量数据的表,通过先删除,然后再按照新的表定义重建表的方式来修改表时,需要做许多额外的工作,例如数据的重载等。可以对于视图来说,由于其实“虚表”,并没有存储数据,所以完全可以通过该方式来修改视图。
-
5.1如果每次修改视图,都是先删除视图,然后再次创建一个同名的视图,则显得非常麻烦。于是,MySQL为了便于用户修改视图,提供了可以实现替换的创建视图语法。
-
5.2 ALTER语句修改视图
- 6利用视图操作基本表
- 在MySQL中可以通过视图检索基本表数据,这是视图最进本的应用,除此之外还可以视图修改基本表中的数据。
-
6.1 检索(查询)数据
通过视图查询数据,与通过表进行查询完全相同,只不过通过视图查询比表更安全、更简单、使用。只要把表名换成视图名即可 -
6.2 利用视图操作基本表数据
我们不仅可以对视图进查询数据,而且还可以对视图进行更新(增加、删除和更新)数据操作,由于视图时“虚表”,所以对视图数据进行更新操作,实际上是对基本表表数据进行更新操作。在具体更新视图数据时,需要注意一下两点
- 对视图数据进行添加,删除和更新操作直接影响基本表。
- 视图来自多个基本表时,不允许添加和删除数据。