Mysql之新建视图。

目录

1、创建视图:

2、使用视图:

3、带检查约束的视图(WITH CHECK OPTION):

4、查看和删除视图:

5、视图的作用:


视图 是基于一个或多个表的查询结果构建的虚拟表,它本身不存储数据,只保存查询逻辑,可像普通表一样被查询。

1、创建视图:

示例:假设需要一个 “部门员工信息视图”,包含部门名称、部门负责人、员工姓名、员工年龄、员工城市。语法如下:

-- 创建视图:部门员工信息汇总

CREATE OR REPLACE VIEW depart_emp_info AS

SELECT

d.depart_name AS 部门名称,

d.depart_manager AS 部门负责人,

e.Emp_name AS 员工姓名,

e.Emp_age AS 员工年龄,

e.Emp_city AS 所在城市

FROM departments d LEFT JOIN employees e

ON d.depart_id = e.Emp_depart_id

ORDER BY d.depart_id, e.Emp_id;

2、使用视图:

-- 查询视图:查看技术部员工信息

SELECT *

FROM depart_emp_info

WHERE 部门名称 = '技术部';

-- 统计各部门30岁以上员工数量(基于视图分组)

SELECT 部门名称, COUNT(员工姓名) AS 大龄员工数

FROM depart_emp_info

WHERE 员工年龄 > 30

GROUP BY 部门名称;

3、带检查约束的视图(WITH CHECK OPTION):

如果需要通过视图修改数据(如新增员工),且要求修改后的数据仍能被视图查询到,可添加 

WITH CHECK OPTION:

-- 创建“北京地区员工视图”,并限制只能通过视图操作北京的员工

CREATE OR REPLACE VIEW beijing_employees AS

SELECT Emp_id, Emp_name, Emp_age, Emp_city, Emp_depart_name

FROM employees

WHERE Emp_city = '北京' WITH CHECK OPTION; -- 确保通过视图插入/更新的员工,城市必须是北京

此时通过视图插入数据时,Emp_city 必须为 '北京',否则会报错:

-- 正确:符合条件,可插入

INSERT INTO beijing_employees (Emp_name, Emp_age, Emp_city, Emp_depart_name) VALUES

('赵六', 29, '北京', '技术部');

-- 错误:不符合CHECK条件(城市不是北京),会被拒绝

INSERT INTO beijing_employees (Emp_name, Emp_age, Emp_city, Emp_depart_name) VALUES

('孙七', 31, '上海', '产品部'); -- 报错:违反CHECK约束

4、查看和删除视图:

-- 查看视图定义

SHOW CREATE VIEW depart_emp_info;

-- 删除视图

DROP VIEW IF EXISTS depart_emp_info;

5、视图的作用:

  1. 简化查询:将复杂的联表 / 分组查询封装为视图,无需重复编写 SQL。
  2. 权限控制:可向用户开放视图访问权限,而非底层表,保护敏感字段(如手机号、OA 账号)。
  3. 逻辑隔离:即使底层表结构变化,只需修改视图定义,不影响依赖视图的查询。

注意:视图主要用于查询,虽然支持插入 / 更新 / 删除(需满足一定条件),但不建议频繁通过视图修改数据,可能导致性能问题或逻辑冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值