MySQL_10 存储引擎和视图

这篇具有很好参考价值的文章主要介绍了MySQL_10 存储引擎和视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、存储引擎

        1.介绍 : 

        2.分类 : 

        3.选择 : 

二、视图

        1.概述 : 

        2.原理 : 

        3.使用格式 : 

        4.代码演示 : 

        5.应用实例 : 


一、存储引擎

        1.介绍 : 

        MySQL的表类型由表的存储引擎(Storage Engines)决定主要包括InnoDB, MyISAM, Memory等等。

        2.分类 : 

        MySQL数据表主要支持六种类型——

        ①CSV;

        ②Memory : 数据存放在内存中,速度很快,适合临时表;

        ③ARCHIVE : 存档类型的存储引擎,批量插入操作的速度非常高;

        ④MRG_MYISAM : 集合性质的存储引擎;

        ⑤MyISAM : 进行批量插入的操作时速度很快;

        ⑥InnoDB : MySQL默认的存储引擎,支持事务机制;

        可以通过SHOW ENGINES指令来查看所有的存储引擎,如下图所示 :

MySQL_10 存储引擎和视图

        以上六种类型根据是否支持事务又可分为两大类——

        ①“事务安全型” (TRANSACTION-SAFE): 支持事务。eg : InnoDB(其余都属于非事务安全型)

        ②“非事务安全型”(NON-TRANSACTION-SAFE) : 不支持事务。eg : Memory, MyISAM;

                PS :  主要的存储引擎及特点,如下图所示 : 

MySQL_10 存储引擎和视图

                InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB引擎写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。

                MyISAM存储引擎既不支持事务,也不支持外键,但其访问速度快,对事务完整性没有要求。

                Memory存储引擎使用存在于内存中的内容来创建表。每个Memory表只实际对应一个磁盘文件。Memory类型表的访问速度非常快(没有I/O读写),因为它的数据是存放在内存中的,并且默认使用了HASH索引。但是,一旦MySQL服务被关闭(eg : 重启MySQL80服务),表中的数据就会全部丢失掉(表的结构还在)。

        3.选择 : 

        若应用不需要事务,只是处理基本的CRUD操作,那么选择MyISAM类型表会很大地提高表的访问速度。

        若应用需要事务的支持,选择InnoDB引擎就完事儿了。

        若表中的数据更新十分频繁,可以考虑使用Memory存储引擎。Memory存储引擎会将数据存储在内存中,由于没有磁盘I/O的等待,速度极快。但每次MySQL服务重启后,所做的任何数据修改都会消失。EG : 用户在线状态的显示

                PS : 
                
可以通过 ALTER TABLE table_name ENGINE = engine_name; 修改表的存储引擎。                


二、视图

        1.概述 : 

        视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图也包含列(字段),但其数据是来源于对应的真实表(也叫基表,基表可以有多张),称视图与基表之间存在映射关系通过视图可以修改基表中的数据,而基表的修改也会影响到视图的数据(可以类比Java中多个引用指向堆空间中同一对象)。

        当表中的某些字段不想被直接访问时,就可以利用视图,规定用户可以访问的字段,用户通过视图与基表之间的映射关系来访问基表中对应的数据。

        2.原理 : 

                有隐私需求的一方可以限定表中的部分列为可访问,并为这些可访问的列创建视图;其他用户会通过视图与基表的映射关系,来访问基表中相应字段的数据

                我们先来建一张员工表,代码如下 : 

CREATE TABLE IF NOT EXISTS `employee`(
		`eno` MEDIUMINT UNSIGNED UNIQUE NOT NULL DEFAULT 0,
		`ename` VARCHAR(20) NOT NULL DEFAULT '',
		`ecareer` VARCHAR(20) NOT NULL DEFAULT '',
		`mgr` MEDIUMINT UNSIGNED,
		`hiredate` DATE NOT NULL,
		`esalary` DECIMAL(8,2) NOT NULL DEFAULT 0.0,
		`ebonus` DECIMAL(8,2) DEFAULT 0.0,
		`deptno` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0
) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;

INSERT INTO `employee`
		VALUES
		(5000, 'Cyan', 'Full_Stack', 2000, '2002-1-1', 9000, NULL, '20'),
		(5001, 'Five', 'Back_End', 2000, '2002-1-1', 9000, 10000, '20'),
		(5534, 'Raina', 'Sale', 2766, '2003-3-1', 5000, 5000, '30'),
		(5537, 'Ice', 'Back_End', 2000, '2003-6-12', 9000, 10000, '20'),
		(5600, 'Kyrie', 'Fore_End', 2000, '2004-9-1', 9500, 20000, '20'),
		(5611, 'James', 'Sale', 2766, '2004-9-13', 5500, 10000, '30'),
		(5612, 'Bob', 'Sale', 2766, '2004-9-15', 5500, 10000, '30'),
		(5700, 'Alice', 'Manage', 1088, '2004-10-1', 20000, 30000, '10'),
		(6111, 'Fiven', 'Manage', 1088, '2006-1-11', 20000, 30000, '10'),
		(6113, 'Cyana', 'Fore_End', 2000, '2006-1-11', 11000, 20000, '20'),
		(6150, 'Peter', 'Accounting', 1760, '2006-3-1', 6000, 20000, '40'),
		(6300, 'White', 'Accounting', 1760, '2009-6-6', 7000, 20000, '40'),
		(6381, 'Frank', 'Manage', 1900, '2010-1-3', 25000, 50000, '10');

SELECT * FROM `employee`;

                员工表如下 :  

MySQL_10 存储引擎和视图

                若我们不想让“上级信息”,“入职信息”,“工资”和“奖金”这些比较敏感的字段被任意访问的话,就可以建立对应的视图,在视图中排除这些不想被任意访问的列,如下图所示 : 

MySQL_10 存储引擎和视图

                当用户想要通过视图查询数据时,就会通过映射关系找到基表中相应的字段,并将字段的数据返回给用户。
                当用户想要通过视图修改数据时,假设WHERE子句只有一个条件,那么需要进行两次映射才能完成该操作,第一次映射是去真实表中找到查询条件的字段,第二次映射是去真实表中找到要修改的字段。 

        3.使用格式 : 

        CREATE VIEW view_name AS SELECT...;

        ALTER VIEW view_name AS SELECT...;

        SHOW CREATE VIEW view_name;    //显示创建视图的指令

        DROP VIEW view_name1, view_name2...;

        PS : 

        ①创建视图后,数据库中仅存在一个对应的视图结构文件(.frm文件),而不存在数据文件。PS : MySQL8.0中不再单独提供.frm文件,而是合并在.ibd文件中

        视图数据的变化会影响到对应的真实表,真实表数据的变化也会影响到视图。

        ③视图中可以再使用视图;但本质上数据都是来自于基表[映射关系]。

        4.代码演示 : 

        操作员工表employee,要求员工的上级信息,入职时间,工资和奖金不能直接访问,要求通过建立视图来实现,如下 : 

CREATE VIEW emp_view_1 
		AS 
		SELECT eno, ename, ecareer, deptno
		FROM employee;
		
SELECT * FROM emp_view_1;

MySQL_10 存储引擎和视图

MySQL_10 存储引擎和视图

                通过视图修改基本表的数据,如下 : 

UPDATE emp_view_1
        SET ecareer = 'Big_Data'
		WHERE eno = 5000;
		
SELECT * FROM emp_view_1;
SELECT * FROM employee;

MySQL_10 存储引擎和视图

MySQL_10 存储引擎和视图

                基本表的数据随着视图的更改而发生了变化
                继续,直接通过基本表来修改数据,如下 : 

UPDATE employee
		SET ecareer = 'Full_Stack'
		WHERE ename = 'Five';

SELECT * FROM emp_view_1;
SELECT * FROM employee;

MySQL_10 存储引擎和视图

MySQL_10 存储引擎和视图

        ​​​​​​​        视图查询的数据随着基本表的更改也发生了变化。
        ​​​​​​​        ​​​​​​​继续,​​​​​​​尝试在视图上再次创建新的视图,如下 :  

CREATE VIEW emp_view_2
		AS
		SELECT eno, ename 
		FROM emp_view_1;
		
SELECT * FROM emp_view_2;

MySQL_10 存储引擎和视图

        5.应用实例 : 

        1° 安全 : 对于包含重要信息的数据表,有些字段是保密的,不能让用户直接看到。这时就可以创建一张视图,在视图中仅保留可见字段。这样既可以满足用户的查询需求,也能做到让用户无法直接查看保密的字段

        2° 性能 : 关系数据库中的数据常常会分表存储,往往通过外键约束来建立表与表之间的关系。这时,在查询时通常会用到连接(JOIN),不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN来查询数据

        3° 灵活 : 如果系统中有一张旧表,该表由于设计问题即将被废弃,但是很多应用的数据都是基于这张表的,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表,这样既可以少做很多改动,也达到了升级数据表的目的。

        System.out.println("END------------------------------------------------------------------------------"); 文章来源地址https://www.toymoban.com/news/detail-468692.html

到了这里,关于MySQL_10 存储引擎和视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL基础(五)视图、存储过程和存储函数、变量

    目录 常见的数据库对象  ​编辑  视图 创建视图 改变视图 优缺点 存储过程与存储函数  创建存储过程  创建存储函数 存储过程和存储函数的区别  存储过程和函数的查看、修改、删除  查看 修改 删除 存储过程的优缺点 优点 缺点 变量 系统变量 查看系统变量 修改变量

    2024年02月13日
    浏览(47)
  • MySQL:存储过程与函数、视图

    一、学习目标 掌握如何创建存储过程 掌握如何创建存储函数 熟悉变量的使用方法 熟悉如何定义条件和处理程序 了解光标的使用方法 掌握流程控制的使用 掌握如何调用存储过程和函数 熟悉如何查看存储过程和函数 掌握修改存储过程和函数的方法 熟悉如何删除存储过程和函

    2024年02月05日
    浏览(50)
  • 高性能、快响应!火山引擎 ByteHouse 物化视图功能及入门介绍

    更多技术交流、求职机会,欢迎关注 字节跳动数据平台微信公众号,回复【1】进入官方交流群 物化视图是指将视图的计算结果存储在数据库中的一种技术。当用户执行查询时,数据库会直接从已经预计算好的结果中获取数据,而不需要重新计算视图。具体来说,物化视图是

    2023年04月27日
    浏览(45)
  • MySQL之存储过程、存储函数、备份还原、索引及视图

    -- 创建统计记录条数的存储函数count_sch() -- 创建存储过程avg_sai() 一、备份与还原 1、使用mysqldump命令备份数据库中的所有表 2、备份booksDB数据库中的books表 3、使用mysqldump备份booksDB和test数据库 4、使用mysqldump备份服务器中的所有数据库 5、使用mysql命令还原第二题导出的book表

    2024年02月16日
    浏览(41)
  • MySQL函数、视图、存储过程及触发器

    MySQL在我们工作中都会用到,那么我们最常接触的就是增删改查,而对于增删改查来说,我们更多的是查询。但是面试中,面试官又不会问你什么查询是怎么写的,都是问一些索引啊,事务啊, 底层结构这些东西,所以我打算分四篇去逐一的过一遍MySQL的知识点。 以下为四篇

    2023年04月09日
    浏览(61)
  • MySQL之视图,触发器与存储过程

    视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据

    2024年02月08日
    浏览(57)
  • MySQL小记——存储过程、触发器、函数、视图

    目录 存储过程 procedure 语法 参数 调用存储过程 call 删除存储过程 drop 带有IF逻辑的存储过程 if then elseif else 带有循环的存储过程 while do 变量 触发器 Trigger 语法 old和new 视图 View 函数 自定义函数 内置函数 存储过程是数据库中的一个对象,存储在服务端,用来封装多条SQL语句

    2024年02月08日
    浏览(55)
  • mysql高级语句之视图、连接查询与存储过程

    目录 视图 视图和表的区别 视图和表的联系 视图命令 视图特点 NULL 值 null、空值和零的区别 连接查询 内连接 左连接 右连接 存储过程 概述 简介 存储过程的优点 语法 调用存储过程 存储过程的参数 查看存储过程 查看指定存储过程信息 修改存储过程 删除存储过程 数据库中

    2024年02月10日
    浏览(47)
  • windows10/11 修改docker镜像存储目录

    windows10/11 修改docker镜像存储目录 docker默认pull的镜像在c盘,随着镜像的增加,C 盘很快就满了,直接影响不少程序的正常使用,使用下面的操作可以将镜像路径移动到其他位置 查看docker的状态 确保docker为关闭状态,如果state下为running时,直接退出docker 关闭所有正在运行的实例

    2024年02月13日
    浏览(47)
  • win10安装Docker Desktop,并修改存储目录

    安装之前先看看自己电脑c盘剩余容量,如果小于30G,建议先配置下再安装 因为docker 安装时不提供指定安装路径和数据存储路径的选项,且默认是安装在C盘的。C盘比较小的,等docker运行久了,一大堆的东西放在上面容易导致磁盘爆掉。所以安装前可以做些准备,让安装的实

    2024年02月10日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包