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;
查看视图
查看视图结构:
语法:
describe 视图名称;
desc 视图名称;
二者都可
案例:
describe demo_view1;
查看视图定义语法:
语法:
show create view 视图名称;
示例:
-- 查看视图定义语法
show create view demo_view1;
修改视图
语法:
alter view 视图名称 as select 字段 from 表名称;
示例:
-- 修改视图
alter view demo_view1 as select name,come_on, come_off from sign_in;
-- 查看视图
select * from demo_view1;
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;
-- 向视图中添加数据,源表中是否有数据(有数据)
select * from sign_in;
通过视图的删除数据
语法:
delete from 视图名称 where 字段 = 数据;
示例:
-- 删除视图中的数据
delete from demo_view1 where id = 11;
-- 查看视图
select * from demo_view1;
删除视图
语法:
drop view 视图名称;
示例:
-- 删除视图
drop view demo_view1;
使用场景
-
当我们需要从多个表中检索数据时,可以使用视图来简化查询。
-
当我们需要限制用户访问表的某些列时,可以使用视图来隐藏这些列。
-
当我们需要将复杂的查询分解为简单的查询时,可以使用视图来简化查询。