视图
1. 视图介绍
- 视图本质
- 视图作用
- 视图特点
出现
- 本质 : 封装复杂的查询语句,形成
虚表
- 作用 :
- 可以避免操作
真实表
- 限制可操作的字段数量
- 更专注与需求数据而不受
表影响
,前提是完成实现需求的查询语句
- 特点 :
- 表 + 需求逻辑(查询语句) => 虚表
关联性
- alter,add, delete操作
内容
影响表 - create,drop操作
视图
不影响表 - 视图来自多表,不可add,delete数据
- alter,add, delete操作
注意
- 修改内容的操作,会触控底层的表,需要根据底层的约束条件设计视图
- 出现 : 5.0.1 版本
- 本质 : 封装复杂的查询语句,形成
2. 视图基本操作
2.1 视图操作 - 单张表
-- 创建视图
CREATE VIEW view_student AS
SELECT sid,sname,sage,ssex,classid FROM student;
-- 展示视图数据
SELECT * FROM view_student;
-- 增加,删除,修改视图数据
INSERT INTO view_student VALUES (123,'丁夏丛',
18,'女', 2);
UPDATE view_student SET sage=23 WHE
RE sname='丁夏丛';
DELETE FROM view_student WHERE sname='丁夏丛';
-- 显示底层数据库的数据,检查add,delete,update是否成功
SELECT sid,sname,sage,ssex FROM student;
eg 以上
view_student
视图中,如果缺少classid
在执行IUD(增删改)时,会发生什么情况?
由于插入数据会向底层数据插入,classid 是外键,来自班级表,将会发生错误。
2.2 视图操作 - 多张表
-- 根据多表创建索引
CREATE VIEW view_stu_cour_sc AS
SELECT stu.sname,stu.sage,course.cname,score.score
FROM student stu,course,score
WHERE stu.sid=score.sid AND course.cid=score.cid;
SELECT*FROM view_stu_cour_sc;
-- 向该视图插入数据
INSERT INTO view_stu_cour_sc VALUES ('qq',1,'ww',21);
-- 报错
-- Can not insert into join view 'exercisemysql.view_stu_cour_sc' without fields list
-- 删除一条数据
DELETE FROM view_stu_cour_sc WHERE sage=23;
-- 报错
-- Can not delete from join view 'exercisemysql.view_stu_cour_sc'
-- 修改数据
-- 修改数据
UPDATE view_stu_cour_sc SET sname='hu',score=20 WHERE sage=23;
-- 报错
-- Can not modify more than one base table through a join view 'exercisemysql.view_stu_cour_sc'
UPDATE view_stu_cour_sc SET sname='胡思' WHERE sname='胡思11111';
-- 成功
-- 获取表的详细信息
SHOW TABLE STATUS LIKE 'view%';
2.3 视图的查看,修改,删除
-- 查看视图的结构,视图的设计信息
SHOW CREATE VIEW view_stu_cour_sc;
desc v_deptCount;
-- 修改视图名字
ALTER VIEW view_stu_cour_sc AS
SELECT*FROM student;
-- 修改视图名字
CREATE OR REPLACE VIEW view_stu_cour_sc AS
SELECT * FROM class;
--删除视图
DROP VIEW view_stu_cour_sc;