【MySQL 数据库】8、视图

这篇具有很好参考价值的文章主要介绍了【MySQL 数据库】8、视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是视图

  • 视图(View)是一种虚拟存在的表
  • 视图中的数据并不在数据库中真实存在
  • 行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的

二、视图语法

【MySQL 数据库】8、视图

--- 创建视图
CREATE 
	OR REPLACE VIEW student_view AS SELECT
	id,
	`name`,
	money 
FROM
	student;
	
--- 查看视图的创建语句
show create view student_view;

--- 查看视图中的数据
select * from student_view;
select * from student_view where id <= 10;

--- 修改视图
create or replace view student_view as select id, `name` from student;
alter view student_view as select id, `name`, money from student;

--- 删除视图
drop view if exists student_view;

三、检查选项

当使用 WITH CHECK OPTION 子句创建视图时,MySQL 会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。

MySQL 允许基于一个视图创建另一个视图,它还会检查依赖视
图中的规则以保持一致性

为了确定检查的范围,MySQL 提供了两个选项: CASCADEDLOCAL,默认值为 CASCADED

🍀 没有添加 with check option 的时候是直接插入,不做校验


# ① 基于 student 表创建了一个视图
# ② 该视图没有添加【检查选项】
# ③ 当使用视图插入的数据不符合视图创建的条件(id <= 20)的时候,数据依然可以插入到 student 表中
create or replace view stu_v1 as select id, `name`, money from student where id <= 20;
select * from stu_v1;

# 没有检查 id 是否符合视图创建的条件(id <= 20)
insert into stu_v1 values (8, 'Happy', 66666);

# 没有检查 id 是否符合视图创建的条件(id <= 20)
# id 不符合视图创建的条件(id <= 20),但依然可以插入到 student 表中
# 但在 stu_v1 中是不存在该条记录的
insert into stu_v1 values (99, 'Nice', 88888);

(1) cascaded(级联)

当视图使用 WITH CASCADED CHECK OPTION WITH CHECK OPTION时,会循环检查视图的规则以及底层视图的规则

create or replace view stu_v1 as select id, `name`, money from student where id <= 20;

# 可插入到基表中, 可插入到 stu_v1 视图中
insert into stu_v1 values (8, 'eight', 88888); 
# 可插入到基表中, 【不】可插入到 stu_v1 视图中
insert into stu_v1 values (22, '22', 22222);
# 可插入到基表中, 可插入到 stu_v1 视图中
insert into stu_v1 values (20, '20', 20000);

# 基于 stu_v1 视图创建有检查选项的视图
create view stu_v2 as select id, `name`, money from stu_v1 where id >= 10 with cascaded check option;
insert into stu_v2 values (6, '6', 66666); # failed
insert into stu_v2 values (21, '21', 21111); # failed(不符合 stu_v1 视图的条件)
insert into stu_v2 values (15, '15', 15555); # OK

# 基于 stu_v2 视图创建【没有】检查选项的视图
create view stu_v3 as select id, `name`, money from stu_v2 where id <= 15;
insert into stu_v3 values (11, '11', 11111); # OK
insert into stu_v3 values(17, '17', 17000); # OK 
insert into stu_v3 values(28, '28888', 28888); # failed

(2) local

🌱 当视图使用 WITH LOCAL CHECK OPTION 时,会递归查找当前视图所依赖的视图是否有检查选项?
🌱 如果有,则检查;如果没有,就不检查

create or replace view stu_v1 as select id, `name`, money from student where id <= 20;

# 基于 stu_v1 视图创建有检查选项的视图
create or replace view stu_v2 as select id, `name`, money from stu_v1 where id >= 10 with local check option;
insert into stu_v2 values (6, '6', 66666); # failed
insert into stu_v2 values (21, '21', 21111); # OK
insert into stu_v2 values (15, '15', 15555); # OK

# 基于 stu_v2 视图创建【没有】检查选项的视图
create or replace view stu_v3 as select id, `name`, money from stu_v2 where id <= 15;
insert into stu_v3 values (9, '9', 99999); # failed
insert into stu_v3 values(17, '17', 17000); # OK 
insert into stu_v3 values(28, '28888', 28888); # OK

四、视图的作用

🌻 要使视图可更新,视图中的行与基表中的行必须存在一对一的关系


🌻 视图不仅可以简化用户对数据的理解,也可以简化它们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

🌻 数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据,有一定的权限控制作用。

🌻 视图可帮助用户屏蔽真实表结构变化带来的影响【数据独立】

五、视图案例

🔥 为了保证数据库表的安全性,开发人员在操作 tb_user 表时,只能看到的用户的基本字段(屏蔽手机号和邮箱两个字段)

CREATE 
	OR REPLACE VIEW user_basic_info_view AS SELECT
	id,
	`name`,
	profession,
	age,
	gender,
	`status`,
	createtime 
FROM
	tb_user;

🔥 查询每个学生所选修的课程(三张表联查),这个功能在很多的业务中都有使用到,为了简化操作,定义一个视图。

CREATE 
	OR REPLACE VIEW student_course_view AS (
SELECT
	s.id '学生编号',
	s.`name`,
	s.`no`,
	c.id '课程编号',
	c.`name` '课程名' 
FROM
	student s
	LEFT JOIN student_course sc ON sc.studentid = s.id
	LEFT JOIN course c ON c.id = sc.courseid 
	);

create table student(
id int auto_increment primary key comment '主键ID',
name varchar(10) comment '姓名',
no varchar(10) comment '学号'
) comment '学生表';
insert into student values (null, '黛绮丝', '2000100101'),(null, '谢逊',
'2000100102'),(null, '殷天正', '2000100103'),(null, '韦一笑', '2000100104');

create table course(
id int auto_increment primary key comment '主键ID',
name varchar(10) comment '课程名称'
) comment '课程表';
insert into course values (null, 'Java'), (null, 'PHP'), (null , 'MySQL') ,
(null, 'Hadoop');

CREATE TABLE student_course (
id INT auto_increment COMMENT '主键' PRIMARY KEY,
studentid INT NOT NULL COMMENT '学生ID',
courseid INT NOT NULL COMMENT '课程ID',
CONSTRAINT fk_courseid FOREIGN KEY ( courseid ) REFERENCES course ( id ),
CONSTRAINT fk_studentid FOREIGN KEY ( studentid ) REFERENCES student ( id ) 
) COMMENT '学生课程中间表';

insert into student_course values (null,1,1),(null,1,2),(null,1,3),(null,2,2),
(null,2,3),(null,3,4);

学习笔记基于黑马程序员的课程,阿里嘎多文章来源地址https://www.toymoban.com/news/detail-478066.html

到了这里,关于【MySQL 数据库】8、视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL中的表与视图:解密数据库世界的基石

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:MySQL的100个知识点。 🎉欢迎 👍点赞✍评论⭐收

    2024年02月10日
    浏览(53)
  • Day04 03-MySQL数据库的DCL(用户|权限|视图)

    第十二章 DCL 12.1 DCL的作用 DCL语句主要用来做用户的创建、管理,权限的授予、撤销等操作的。 12.2 管理用户 创建、删除用户的操作,必须要使用root用户才可以完成! 12.3 权限管理 如果在授权远程登录的时候,出现如下问题: Unable to load authentication plugin ‘caching_sha2_password’

    2024年02月07日
    浏览(47)
  • 数据库系统原理及MySQL应用教程实验六视图创建与管理

    1.理解视图的概念。 2.掌握创建、更改、删除视图的方法。 3.掌握使用视图来访问数据的方法。 1.验证性实验:在job数据库中,有聘任人员信息表:Work_lnfo表对其视图的操作。 2.设计性试验:在学生管理系统中,有学生信息表studentinfo表对其视图的操作。 (一)验证性实验 在

    2024年02月04日
    浏览(63)
  • 数据库强化(1.视图)

    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。 简化用户对

    2024年02月06日
    浏览(30)
  • 数据库的视图

    数据库视图是一种虚拟的表,它不是一个实际的表,而是根据一个或多个实际表的查询结果生成的一个虚拟表,它可以看作是对一个或多个表的一个或多个列的子集的逻辑表示。在数据库中,视图有以下几个作用: 数据安全:数据库视图可以隐藏数据库中某些敏感的数据,只

    2024年02月09日
    浏览(27)
  • 数据库 实验8 视图

    实验8  视图 一、实验目的: (1) 理解视图的概念。 (2) 掌握创建、更改、删除视图的方法。 (3) 掌握使用视图来访问数据的方法。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 3、1~2人为1小组,实验

    2024年02月06日
    浏览(49)
  • 数据库实验:SQL的数据视图

    视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的

    2024年02月05日
    浏览(37)
  • 数据库实验3---索引和视图

    使用SQL语句ALTER TABLE分别删除studentsdb数据库的student_info表、grade表、curriculum表的主键索引。 使用SQL语句为curriculum表的课程编号创建唯一性索引,命名为cno_idx。 使用SQL语句为grade表的“分数”字段创建一个普通索引,命名为grade_idx。 使用SQL语句为grade表的“学号”和“课程编

    2024年02月05日
    浏览(39)
  • 数据库视图与索引经典题

    https://www.jianshu.com/p/d0aa8ac94f40 可以通过视图对某些用户查询的数据进行限制 可以把一些常用的、复杂的统计类的做成视图 使用视图 :当做一张虚拟的表来使用 视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。 数据库只存放视图的定义,而不

    2024年02月12日
    浏览(30)
  • 【数据库原理】(13)视图的使用

    视图(View) 是一种虚拟的表,它的内容由查询定义,但不存储实际的数据。视图是从一个或多个基本表(或其他视图)生成的。 特点: 虚拟性 :视图不包含数据本身,仅保存了一个查询,这个查询在每次访问视图时动态地执行。 动态性 :视图显示的数据是从基本表中实时

    2024年02月02日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包