7、 视图
为了提高SQL语句的复用性和操作表的安全性,MySQL数据库管理系统提供了视图特性。
视图:本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的行和列数据。但是视图并不在数据库中一存储的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。
7.1 视图的特点
•视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系
•视图是由基本表(实表)产生的表(虚表)
•视图的建立和删除不影响基本表
•对视图内容的更新(添加、删除和修改)直接影响基本表
•当视图来自多个基本表时,不允许添加和删除数据
•更新基本表中的数据,视图中的数据也会跟着更新。
7.2创建视图
(1)创建视图的语法形式
虽然视图可以被看成是一种虚拟表,但是其在物理上是不存在的,即数据库管理系统没有专门的位置为视图存储数据。
create view view_name
AS 查询语句;
注意:在SQL语句命名规范中,视图一般以view——xxx或者v_xxx的样式来命名。
(2)视图的查询
SELECT *
FROM view_name;
(3)查看视图
#查看视图名
SHOW TABLES;
#查看视图定义信息
SHOW CREATE VIEW viewname;
7.3修改视图
修改视图语句:
# CREATE [OR REPLACE] VIEW 语句修改视图
Create[ or replace ]view view_name
as 查询语句;
# ALTER 语句修改视图
ALTER VIEW viewname
as 查询语句;
7.4删除视图
删除视图的语法格式如下:
DROP VIEW view_name [,view_name]...
案例:
#在数据库chapter07中创建表。
CREATE DATABASE chapter07;
USE chapter07;
CREATE TABLE employee (
id int(4) NOT NULL PRIMARY KEY,
name varchar(36),
age int(2),
did int(4) NOT NULL,
dname varchar(36)
);
#添加数据
INSERT INTO employee(id,name,age,did,dname)VALUES(1,'王红',20,1,'网络部');
INSERT INTO employee(id,name,age,did,dname)VALUES(2,'李强',22,1,'网络部');
INSERT INTO employee(id,name,age,did,dname)VALUES(3,'赵四',20,2,'媒体部');
INSERT INTO employee(id,name,age,did,dname)VALUES(4,'郝娟',20,4,'人事部');
#创建视图
create view view_employee
AS
Select id,name,age ,dname from employee;
#查询视图
Select * from view_employee;
#查看视图
SHOW TABLES;
SHOW CREATE VIEW view_employee;
#修改视图方法1:
Create or replace view view_employee
As
Select * from employee;
#查询视图
Select * from view_employee;
#修改视图方法2:
ALTER VIEW view_employee
As
Select id,name from employee;
#查询视图
Select * from view_employee;