【MySQL视图】视图处理算法 , 创建 {单表,多表,视图中创建视图},查看,和修改。最详细来这里!

这篇具有很好参考价值的文章主要介绍了【MySQL视图】视图处理算法 , 创建 {单表,多表,视图中创建视图},查看,和修改。最详细来这里!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视图是存储,在调用的时候产生一个结果集的查询。一个视图作为一个虚拟表。

简单理解:视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

 

前言

 视图优点
1. 操作简单

将经常使用的查询操作定义为视图,可以使开发人员不需要关心视图对应的数据表的结构、表与表之间的关联关系,也不需要关心数据表之间的业务逻辑和查询条件,而只需要简单地操作视图即可,极大简化了开发人员对数据库的操作。

2. 减少数据冗余

视图跟实际数据表不一样,它存储的是查询语句。所以,在使用的时候,我们要通过定义视图的查询语句来获取结果集。而视图本身不存储数据,不占用数据存储的资源,减少了数据冗余。

3. 数据安全

MySQL将用户对数据的 访问限制 在某些数据的结果集上,而这些数据的结果集可以使用视图来实现。用户不必直接查询或操作数据表。这也可以理解为视图具有 隔离性 。视图相当于在用户和实际的数据表之间加了一层虚拟表。同时,MySQL可以根据权限将用户对数据的访问限制在某些视图上,用户不需要查询数据表,可以直接通过视图获取数据表中的信息。这在一定程度上保障了数据表中数据的安全性。

4. 适应灵活多变的需求

当业务系统的需求发生变化后,如果需要改动数据表的结构,则工作量相对较大,可以使用视图来减少改动的工作量。这种方式在实际工作中使用得比较多。

5. 能够分解复杂的查询逻辑

数据库中如果存在复杂的查询逻辑,则可以将问题进行分解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑。

 


一、创建视图{单表,多表,视图中创建视图}

这个CREATE VIEW语句创建新的视图。改变视图的定义或删除视图,使用ALTER VIEW,或DROP VIEW

一个视图可以从多种创建SELECT声明.它可以指基表或其他视图。它可以使用联接,UNION和子查询。theSELECT甚至不需要参考任何表。下面的示例定义一个视图,选择从另一桌两列,以及从这些列的计算表达式:

CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名称 [(字段列表)]
AS 查询语句
[WITH [CASCADED|LOCAL] CHECK OPTION]

 简单表达式

CREATE VIEW 视图名称
AS 查询语句

 创建多表联合视图:

就是在视图中的查询语句添加多表查询,自然连接或者USING连接,函数等。

类如:WHERE

CREATE VIEW empview
AS
SELECT employee_id emp_id,last_name NAME,department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id;

左外连接

CREATE VIEW emp_dept
AS
SELECT ename,dname
FROM t_employee LEFT JOIN t_department
ON t_employee.did = t_department.did;

 聚合函数

CREATE VIEW dept_sum_vu
(name, minsal, maxsal, avgsal)
AS
SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary)
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name;

 利用视图对数据进行格式化:

我们经常需要输出某个格式的内容,比如我们想输出员工姓名和对应的部门名,对应格式为
emp_name(department_name),就可以使用视图来完成数据格式化的操作:

CREATE VIEW emp_depart
AS
SELECT CONCAT(last_name,'(',department_name,')') AS emp_dept
FROM employees e JOIN departments d
WHERE e.department_id = d.department_id

 运行后:

【MySQL视图】视图处理算法 , 创建 {单表,多表,视图中创建视图},查看,和修改。最详细来这里!

二、查看视图

        语法1:查看数据库的表对象、视图对象

SHOW TABLES;

        语法2:查看视图的结构

DESC / DESCRIBE 视图名称;

        语法3:查看视图的属性信息

# 查看视图信息(显示数据表的存储引擎、版本、数据行数和数据大小等)
SHOW TABLE STATUS LIKE '视图名称'\G

1.更新视图的数据

*一般情况*

MySQL支持使用INSERT、UPDATE和DELETE语句对视图中的数据进行插入、更新和删除操作。当视图中的数据发生变化时,数据表中的数据也会发生变化,反之亦然。

更新和插入的观点:

一些视图是可更新的,对它们的引用可以用来指定要更新的表中数据变化报表。那就是,你可以使用它们的报表等UPDATEDELETE,或INSERT更新基础表的内容。派生表、公用表表达式也可以在多个表中指定的UPDATEDELETE报表,但只能用于读取数据指定要更新或删除的行。一般来说,视图的引用必须是可更新的,这意味着他们可以合并和不实。复合视图有更复杂的规则。

一个视图是可更新的,必须有一个一对一的关系排在视图和基础表中的行。也有一些其他的结构,使视图nonupdatable。更具体的,如果它包含下列视图是不可更新的:

  • 聚合函数和窗口函数(SUM()MIN()MAX()COUNT()我知道,和四)

  • DISTINCT

  • GROUP BY

  • HAVING

  • UNIONUNION ALL

  • 选择列表中的子查询

    独立的子查询选择列表中的失败INSERT,但都好UPDATEDELETE。相关子查询的选择列表中,没有数据变化报表允许。

  • 某些连接(见附加在本节稍后加入讨论)

  • 参考在nonupdatable观FROM条款

  • 子查询中的WHERE条款,是指一个表中条款

  • 仅指文字值(在这种情况下,没有基本表的更新)

  • ALGORITHM = TEMPTABLE(使用一个临时表总是认为nonupdatable)

  • 多个引用任何一个基表列(失败INSERT,好了UPDATEDELETE

  • 对于多表视图是可更新,它有时是可能的,假设它可以处理的MERGE算法.对于这个工作,视图必须使用内部联接(不是外部联接或UNION)。另外,在视图定义中只有一个表可以被更新,所以配置条款名称仅列必须从一个视图中的表。视图的使用UNION ALL不允许他们虽然在理论上可能更新。

  • 关于嵌入性(被更新与INSERT语句),如果它也满足这些额外的要求可更新视图的视图列插入:

  • 不能有重复的视图列的名字。

  • 视图必须包含在基表中,没有默认值的所有列。

  • 视图的列必须是简单的列引用。

2.修改、删除视图

修改视图
方式1:使用CREATE OR REPLACE VIEW 子句修改视图

CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS
SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employees
WHERE department_id = 80;

说明:CREATE VIEW 子句中各列的别名应和子查询中各列相对应。

 方式2:ALTER VIEW
修改视图的语法是:

ALTER VIEW 视图名称
AS
查询语句

删除视图:
        删除视图只是删除视图的定义,并不会删除基表的数据。

DROP VIEW IF EXISTS 视图名称;

总结

点赞加收藏是我最大的动力!文章来源地址https://www.toymoban.com/news/detail-471310.html

到了这里,关于【MySQL视图】视图处理算法 , 创建 {单表,多表,视图中创建视图},查看,和修改。最详细来这里!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 六、MySQL---综合练习题(单表、多表、分组函数以及等级查询)

    数据库:dept_emp 1. dept表 :deptno’部门编号’、dname’部门名称’、loc’地理位置’; 2. emp表 :empno ‘员工编号’、ename ‘员工名字’、job ‘职位’、mgr ‘上司’、hiredate ‘入职时间’、sal ‘基本工资’,comm ‘补贴’,deptno ‘所属部门编号’; 3. salgrade :grade ‘工资等级’

    2024年01月21日
    浏览(40)
  • 【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

    目录 1.聚合函数 1.1.group by子句 1.2.having语句 2.单表查询  2.2单表查询 3.多表查询  3.2.子查询 5.内链接 6.外连接 函数 说明 count 返回查询到的数据的数量 sum 返回查询到的数据的总和 avg 返回查询到的数据的平均值 max 返回查询到的数据的最大值 min 返回查询到的数据的最小值

    2024年02月04日
    浏览(32)
  • 【MySQL】MySQL表的操作-创建查看删除和修改

    语法: 说明: field 表示列名 datatype 表示列的类型 set 字符集,如果没有指定字符集,则以所在数据库的字符集为准 collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 说明: 不同的存储引擎,创建表的文件不一样。 users 表存储引擎是 MyISAM ,在数据目

    2024年02月03日
    浏览(39)
  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(34)
  • 基于SqlSugar的开发框架循序渐进介绍(31)-- 在查询接口中实现多表联合和单表对象的统一处理

    在一些复杂的业务表中间查询数据,有时候操作会比较复杂一些,不过基于SqlSugar的相关操作,处理的代码会比较简单一些,以前我在随笔《基于SqlSugar的开发框架循序渐进介绍(2)-- 基于中间表的查询处理》介绍过基于主表和中间表的联合查询,而往往实际会比这个会复杂

    2024年02月07日
    浏览(37)
  • 【⑯MySQL | 存储过程与函数】概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL存储过程与函数概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议的分享 ✨ MySql从5.0版本开始支持存储过程和函数,存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要

    2024年02月10日
    浏览(41)
  • ES(Kibana)索引拷贝/查看配置信息/查看字段信息/添加新字段/创建索引视图

    kibana - Management - Index Patterns - Create index pattern - 输入索引名称(注意这里的*号为匹配符,若确定某个具体的索引请删除) - Next step - Time Filter field name(选择是否使用时间选择器) - Create index Pattern -完成(在Discover中可查看此视图)

    2024年02月16日
    浏览(46)
  • mysql查看视图的实体表来源

    show create table +实体表/视图名 用途: 对应的某个表/视图的创建语句; 场景一:查看对应视图数据来源于哪些实体表 场景二:查看对应实体表的创建语句(DDL) 该命令可以查看一个表的 建表 语句---即表结构(DDL) Show create table  A   -- A为实体表 table Create Table A A表   表结构

    2024年02月07日
    浏览(29)
  • MySQL视图创建和给予用户视图权限

    在 checkrecord 表上创建一个名为 v_checkrecord 的视图 只映射id,username,nickname字段 通过这个视图可以很好地保护基本表中的数据。 SELECT * FROM v_checkrecord 使用 CREATE USER 创建一个用户,用户名是 test1,密码是 test1,主机名是 localhost。SQL 语句和执行过程如下。 使用 RENAME USER 语句将

    2024年02月12日
    浏览(37)
  • MySQL利用视图插入修改删除数据

    已有数据库stu,数据表student、course、score: 利用v1插入记录: 插入失败,错误提示: Error Code: 1471. The target table v1 of the INSERT is not insertable-into 利用v2插入记录: 插入成功。 v1和v2相比,v1比v2多了个字段计算年龄的表达式year(now())-year(birth)。 插入失败可能原因1:定义视图的

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包