博客
关于我
MySQL学习笔记(十五)—— MySQL的视图
阅读量:733 次
发布时间:2019-03-21

本文共 2209 字,大约阅读时间需要 7 分钟。

视图的基础与应用

一、创建视图

在实际工作中,通过定义视图可以将复杂的查询逻辑隐藏起来,便于日常使用。MySQL支持CREATE VIEW语句,通过定义视图可以将复杂的查询逻辑隐藏起来,便于日常使用。以下是创建视图的关键点:

1. 查询姓名中包含'a'字符的员工信息

创建视图

CREATE VIEW myv1 AS SELECT last_name, department_name, job_title FROM employees eJOIN departments d ON e.department_id = d.department_idJOIN jobs j ON j.job_id = e.job_id;

具体查询

SELECT * FROM myv1 WHERE last_name LIKE '%a%';

2. 查询各部门的平均工资级别

创建视图

CREATE VIEW myv2 AS SELECT AVG(salary) AS average_salary, department_id FROM employeesGROUP BY department_id;

查询特定部门的信息

SELECT myv2.average_salary, job_grades.grade_level FROM myv2JOIN job_grades ON myv2.average_salary BETWEEN job_grades.lowest_sal AND job_grades.highest_sal;

二、视图的修改

视图的修改可以通过以下两种方式实现:

1. 使用CREATE OR REPLACE语句

CREATE OR REPLACE VIEW myv3 AS SELECT * FROM myv2 ORDER BY average_salary LIMIT 1;

2. 使用ALTER VIEW语句

ALTER VIEW myv3 AS SELECT * FROM employees;

三、删除视图

当不再需要视图时,可以通过以下语句删除:

DROP VIEW myv1, myv2, myv3;

四、查看视图

可以通过以下语句查看视图的定义和创建细节:

DESC myv3;  -- 查看视图字段信息SHOW CREATE VIEW myv3;  -- 查看视图的创建语句

五、视图的更新

定义的视图可以像普通表一样进行插入、更新和删除操作,但需要注意以下限制条件。

1. 插入操作

INSERT INTO myv1 VALUES('张飞','zf@qq.com');

2. 修改操作

UPDATE myv1 SET last_name = '张无忌' WHERE last_name = '张飞';

3. 删除操作

DELETE FROM myv1 WHERE last_name = '张无忌';

不允许更新的视图类型

以下类型的视图不允许更新:

  • 包含DISTINCT、GROUP BY、HAVING、UNION或UNION ALL的视图

    CREATE OR REPLACE VIEW myv1 AS SELECT MAX(salary) salary, department_id FROM employeesGROUP BY department_id;

    更新失败原因:MAX函数返回的是聚合后的结果,视图不允许直接更新。

  • 常量视图

    CREATE OR REPLACE VIEW myv2 AS SELECT 'john' AS name;

    更新失败原因:name字段是一个固定的常量。

  • 包含子查询的视图

    CREATE OR REPLACE VIEW myv3 AS SELECT department_id, (SELECT MAX(salary) FROM employees) AS highest_salary FROM departments;

    更新失败原因:最高工资字段引用了子查询的结果。

  • 包含JOIN操作的视图

    CREATE OR REPLACE VIEW myv4 AS SELECT last_name, department_name FROM employees eJOIN departments d ON e.department_id = d.department_id;

    更新失败原因:JOIN生成的视图通常无法直接更新原表中的数据。

  • 从一个不能更新的视图中查询

    CREATE OR REPLACE VIEW myv5 AS SELECT * FROM myv3;

    更新失败原因:视图myv3本身不允许更新。

  • 包含WHERE子句的子查询引用的视图

    CREATE OR REPLACE VIEW myv6 AS SELECT last_name, email, salary FROM employeesWHERE employee_id IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL);

    更新失败原因:子查询引用了WHERE子句中的表,导致视图无法更新。

  • 在实际项目中,以上类型的视图通常不允许直接更新操作,需要通过基表直接插入或更新,或者删除视图后重新定义。

    转载地址:http://phtgz.baihongyu.com/

    你可能感兴趣的文章
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校危化品管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校教学档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校教学督导平台(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校校内景点平台(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校校园线上跳蚤市场的系统设计(程序+开题+论文)
    查看>>
    Python图形处理
    查看>>
    python+flask计算机毕业设计高校物品使用互益平台的设计与实现(程序+开题+论文)
    查看>>
    Python函数,匿名函数,高阶函数,内置函数——08
    查看>>
    python+flask计算机毕业设计高校疫情防控管理平台(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校网上迎新系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校运动会(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校选课系统(程序+开题+论文)
    查看>>
    Python+Jenkins+Allure Report接口自动化测试持续集成
    查看>>
    python+locust电商全流程性能测试
    查看>>
    Python函数运行的可执行文件的终端输出如何以一般方式静音?
    查看>>