视图
创建数据库
CREATE DATABASE chapter07;
选择数据库
USE chapter07;
创建数据表
CREATE TABLE student(
s_id INT(3),
name VARCHAR(20),
math FLOAT,
chinese FLOAT
);
插入数据
INSERT INTO student (s_id,name,math,chinese) VALUES
(1,'Tom',80,78),
(2,'Jack',70,80),
(3,'Lucy',97,95);
在单表上创建试图
1. 在student表上创建view_stu试图
CREATE VIEW view_stu AS SELECT math,chinese,math+chinese FROM student;
2. 在student表上创建一个名为view_stu2的视图,自定义字段名称
CREATE VIEW view_stu2(math,chin,sum) AS SELECT math,chinese,math+chinese FROM student;
创建数据表
CREATE TABLE stu_info(
s_id INT(3),
class VARCHAR(50),
addr VARCHAR(100)
);
插入数据
INSERT INTO stu_info (s_id,class,addr) VALUES
(1,'erban','anhui'),
(2,'sanban','chongqing'),
(3,'yiban','shandong');
在多表上创建视图
1. 创建stu_class视图
CREATE VIEW stu_class(id,name,glass) AS SELECT student.s_id,student.name,stu_info.class FROM student,stu_info WHERE student.s_id=stu_info.s_id;
查看视图
查看视图,是指查看数据库中已经存在的视图的定义。查看视图必须有SHOW VIEW的权限。
1. 使用DESC语句查看视图
使用DESC语句可以查看视图的字段信息,其中包括字段名、字段类型等信息。
DESC stu_class;
2. 使用SHOW TABLE STATUS语句查看视图
使用SHOW TABLE STATUS语句可以查看视图的基本信息。
SHOW TABLE STATUS LIKE 'stu_class' \G
3. 使用SHOW CREATE VIEW查看视图
使用SHOW CREATE VIEW语句不仅可以查看创建视图时的定义语句,还可以查看视图的字符编码。
SHOW CREATE VIEW stu_class \G
修改视图
所谓修改视图是指修改数据库中存在的视图的定义,比如,当基本表中的某些字段发生变化时,可以通过吸怪视图的方式来保持视图与基本表的一致性。
1.使用CREATE OR REPLACE VIEW语句修改视图
在使用CREATE OR REPLACE VIEW语句修改视图时,如果修改的视图存在,那么将使用修改语句对视图进行修改,如果视图不存在,那么将创建一个视图。
CREATE OR REPLACE VIEW view_stu AS SELECT * FROM student;
修改后的字段信息和student表中的字段信息完全相同。
2. 使用ALTER语句修改视图
ALTER VIEW view_stu AS SELECT chinese FROM student;
使用 ALTER语句修改后的view_stu视图中只剩下一个chinese字段。
更新视图
更新视图是指通过视图来更新、插入、删除基本表中的数据。因为视图是一个虚拟表,其中没有数据,当通过视图更新数据时其实实在更新基本表中的数据,如果对视图中的数据进行增加或者删除操作时,实际上就是在对其基本表中的数据进行增加或者删除操作。
1. 使用UPDATE语句更新视图
UPDATE view_stu SET chinese=100;
2. 使用INSERT语句更新视图
INSERT INTO student VALUES (4,'lILY',100,100);
3. 使用DELETE语句更新视图
DELETE FROM view_stu2 WHERE math=70;
4. 当视图中包含如下内容时,试图的更新操作将不能被执行
(1)视图中包含基本表中被定义为非空的列。
(2)在定义视图的SELECT语句后的字段列表中使用了数学表达式。
(3)在定义视图的SELECT语句后的字段列表中使用了聚合函数。
(4)在定义视图的SELECT语句中使用了DISTINCT,UNION,TOP,GROUP BY 或HAVING子句。
删除视图
当视图不再需要时,可以将其删除,删除视图时,只能删除视图的定义,不会删除数据。
1. 删除viwe_stu2视图
DROP VIEW IF EXISTS view_stu2;