目录
3、带检查约束的视图(WITH CHECK OPTION):
视图 是基于一个或多个表的查询结果构建的虚拟表,它本身不存储数据,只保存查询逻辑,可像普通表一样被查询。
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、视图的作用:
- 简化查询:将复杂的联表 / 分组查询封装为视图,无需重复编写 SQL。
- 权限控制:可向用户开放视图访问权限,而非底层表,保护敏感字段(如手机号、OA 账号)。
- 逻辑隔离:即使底层表结构变化,只需修改视图定义,不影响依赖视图的查询。
注意:视图主要用于查询,虽然支持插入 / 更新 / 删除(需满足一定条件),但不建议频繁通过视图修改数据,可能导致性能问题或逻辑冲突。

1万+

被折叠的 条评论
为什么被折叠?



