MySQL之视图
Posted 一个有意境的名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之视图相关的知识,希望对你有一定的参考价值。
一、视图的定义
视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。其内容由查询定义。
但是,视图并不在数据库中以存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由其定义结果组成的表;
二、视图的优缺点
优点:
1,数据库视图允许简化复杂查询,通过数据库视图,您只需使用简单的SQL语句,而不是使用具有多个连接的复杂的SQL语句。
2,安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限。
缺点:
1、性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
2、表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图。
三、创建视图
语法:
CREATE VIEW 视图名称 AS SQL语句
ex:
#两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----------------+ | 1 | 张磊老师 | | 2 | 李平老师 | | 3 | 刘海燕老师 | | 4 | 朱云海老师 | | 5 | 李杰老师 | +-----+-----------------+ rows in set (0.00 sec) #查询李平老师教授的课程名 mysql> select cname from course where teacher_id = (select tid from teacher where tname=‘李平老师‘); +--------+ | cname | +--------+ | 物理 | | 美术 | +--------+ rows in set (0.00 sec) #子查询出临时表,作为teacher_id等判断依据 select tid from teacher where tname=‘李平老师‘
create view teacher_view as select tid from teacher where tname=‘李平老师‘; #于是查询李平老师教授的课程名的sql可以改写为 mysql> select cname from course where teacher_id = (select tid from teacher_view); +--------+ | cname | +--------+ | 物理 | | 美术 | +--------+ rows in set (0.00 sec)
四、使用视图
mysql> create view tt as select * from course left join teacher on teacher.tid = course.teacher_id; Query OK, 0 rows affected (0.02 sec) mysql> select * from tt; +-----+--------+------------+------+-----------------+ | cid | cname | teacher_id | tid | tname | +-----+--------+------------+------+-----------------+ | 1 | 王五 | 1 | 1 | 张磊老师 | | 2 | 王五 | 2 | 2 | 丽萍老师 | | 4 | 王五 | 2 | 2 | 丽萍老师 | | 5 | 王五 | 2 | 2 | 丽萍老师 | | 6 | 王五 | 2 | 2 | 丽萍老师 | | 3 | 王五 | 3 | 3 | 王海燕老师 | +-----+--------+------------+------+-----------------+ rows in set (0.01 sec) 不能修改视图的数据,验证为例: mysql> insert into tt values(7,‘哈哈‘,2,4,‘张三丰老师‘); ERROR 1471 (HY000): The target table tt of the INSERT is not insertable-into
五、修改视图
# 语法:ALTER VIEW 视图名称 AS SQL语句 mysql> alter view teacher_view as select * from course where cid>3; Query OK, 0 rows affected (0.04 sec) mysql> select * from teacher_view; +-----+-------+------------+ | cid | cname | teacher_id | +-----+-------+------------+ | 4 | xxx | 2 | | 5 | yyy | 2 | +-----+-------+------------+ rows in set (0.00 sec)
七、删除视图
# 语法:DROP VIEW 视图名称
DROP VIEW teacher_view
以上是关于MySQL之视图的主要内容,如果未能解决你的问题,请参考以下文章