MySQL之视图

MySQL视图

MySQL的视图是一种虚拟的表格,它是从一个或多个MySQL表中导出的结果集。视图与存储在数据库中的物理表不同,因为它们不包含数据。相反,它们只包含查询定义。视图可以简化复杂的查询,并允许用户以一种更自然的方式组织和理解数据。

为什么使用视图

  • MySQL视图可以简化对基本表的复杂查询,同时保护基本表的数据,因此可以提高查询效率和重用性。
  • 视图可以被视为存储在数据库中的预定义查询,可以方便地进行数据分析和报表生成。
  • 视图还可以实现数据独立性,即使基本表的结构发生变化,视图的结构和查询语句也不需要改变。因此,使用视图可以使数据库的设计更加简单、安全和灵活。

创建视图

语法:

create view 视图名称 as select 字段1,字段2... from 表;

注意:

视图名称:指定视图的名称,该名称在数据库中必须是唯一的,不能与其他的视图同名

select语句:指定创建视图的select语句,可以用于查询多个基础表或源视图。

准备表和数据

-- 创建签到表
-- primary key 主键
-- auto_increment 字段自增
-- character set utf8 字段编码格式为utf8
-- default null 默认为空
-- not null 不能为空
-- charset = utf8 设置表的编码格式
-- if not exists  如果不存在
create table if not exists sign_in(
    id int primary key auto_increment comment '主键id',
    name varchar(20) character set utf8 default null comment '姓名',
    sex char character set utf8 default '男' comment '性别',
    student_id  varchar(20) character set utf8 not null comment '学号',
    come_on datetime default null comment '上课签到',
    come_off datetime  default null comment '下课签到时间'
)charset = utf8;

-- 添加数据
insert into sign_in(name, sex, student_id, come_on, come_off)
values ('张三','男','123456','2023-04-21 09:00:00','2023-04-21 18:00:00'),
       ('李四','女','654321','2023-04-21 08:00:00','2023-04-21 18:00:00'),
       ('王五','男','123456','2023-04-21 04:00:00','2023-04-21 18:00:00'),
       ('赵六','女','123456','2023-04-21 09:00:00','2023-04-21 18:00:00'),
       ('唐七','男','654321','2023-04-21 02:00:00','2023-04-21 18:00:00'),
       ('小明','女','123456','2023-04-21 09:00:00','2023-04-21 18:00:00'),
       ('小红','男','123456','2023-04-21 09:00:00','2023-04-21 18:00:00'),
       ('小张','女','654321','2023-04-21 06:00:00','2023-04-21 18:00:00'),
       ('jack','男','123456','2023-04-21 07:00:00','2023-04-21 18:00:00'),
       ('肉丝','女','654321','2023-04-21 09:00:00','2023-04-21 18:00:00');
-- 创建视图
create view demo_view1 as select id, name, sex, student_id, come_on, come_off from sign_in;

调用视图

语法:

select * from 视图名称;

要调用视图,只需使用select语句,后跟视图的名称即可;

案例:

select * from demo_view1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VlcMoqwt-1682812632384)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421145820429.png)]

查看视图

查看视图结构:

语法:

describe 视图名称;
desc 视图名称;

二者都可

案例:

describe demo_view1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yBossn2H-1682812632386)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421150450192.png)]

查看视图定义语法:

语法:

show create view 视图名称;

示例:

-- 查看视图定义语法
show create view demo_view1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sT2jCvEE-1682812632388)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421151121416.png)]

修改视图

语法:

alter view 视图名称 as select 字段 from 表名称;

示例:

-- 修改视图
alter view demo_view1 as select name,come_on, come_off from sign_in;
-- 查看视图
select * from demo_view1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlaDHLOs-1682812632389)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421151724443.png)]

create or replace view 视图名称 as select 字段 from 表名称;

向视图中添加数据

语法:

insert into 视图名称 values (对应数据);

示例:

-- 向视图中添加数据
insert into demo_view1(name, sex, student_id, come_on, come_off)
values ('老王','男','963741','2023-04-21 09:00:00','2023-04-21 18:00:00');
-- 查看视图
select * from demo_view1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAST9b9H-1682812632390)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421152658563.png)]

-- 向视图中添加数据,源表中是否有数据(有数据)
select  * from sign_in;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rULjtiEa-1682812632392)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421152720752.png)]

通过视图的删除数据

语法:

delete from 视图名称 where 字段 = 数据;

示例:

-- 删除视图中的数据
delete from demo_view1 where id = 11;
-- 查看视图
select * from demo_view1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iOMjiOnQ-1682812632394)(E:\Java笔记\数据库\MySQL视图\MySQL视图.assets\image-20230421160715822.png)]

删除视图

语法:

drop  view 视图名称;

示例:

-- 删除视图
drop view demo_view1;

使用场景

  1. 当我们需要从多个表中检索数据时,可以使用视图来简化查询。

  2. 当我们需要限制用户访问表的某些列时,可以使用视图来隐藏这些列。

  3. 当我们需要将复杂的查询分解为简单的查询时,可以使用视图来简化查询。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆卿之

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值