MySQL_10 存储引擎和视图

news2025/1/11 3:51:32

目录

一、存储引擎

        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指令来查看所有的存储引擎,如下图所示 :

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

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

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

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

                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`;

                员工表如下 :  

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

                当用户想要通过视图查询数据时,就会通过映射关系找到基表中相应的字段,并将字段的数据返回给用户。
                当用户想要通过视图修改数据时,假设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;

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

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

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

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

SELECT * FROM emp_view_1;
SELECT * FROM employee;

                尝试在视图上再次创建新的视图,如下 :  

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

        5.应用实例 : 

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

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

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

        System.out.println("END------------------------------------------------------------------------------"); 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何打通企业内部的数据孤岛?

如何打通企业内部的数据孤岛? 在信息爆炸、数字经济的环境下,数据孤岛问题算是企业在处理数据时的一个顽疾,已经引起各行各业的普遍重视。 01 什么是数据孤岛? 企业发展到一定阶段,会出现不同的业务、部门&#xff…

gcc与g++的安装和使用

首先大致介绍一下gcc和g. 在此之前,你需要先安装gcc与g,然后才能进行指令操作. 命令如下: sudo yum install -y gcc-c 在命令行输入以上指令后,gcc/g便成功安装了. gcc是一个专门用来编译链接c语言的编译器. g(c). gcc只能…

cuda3 管理内存 代码解析额

内存管理 全局内存数据主要存放的地方 共享内存块内数据同步的地方 返回一个标记符 是否成功 比普通Malloc快一倍 统一内存分配释放 少了传输过程 同步拷贝 必须等拷贝完才会执行下面的 异步 注意拷贝是否完成,如果直接使用,并不知道拷贝是否完成 共…

微信小程序实现商品加入购物车案例

思考:购物车中的数据保存在哪里?用哪种数据结构进行保存? 小程序中可能有多个页面需要对购物车中的数据进行操作,因此我们想到把数据存到全局中。可以使用wx.setStorageSync()储存,用wx.getStorageSync()进行获取&…

Linux压缩与解压缩

目录 Linux压缩与解压缩 zip和unzip命令 定义 语法格式 参数及其作用 案例 素材准备 案例1 --- 使用zip也所文件test1.txt 案例2 --- 压缩率为最高压缩test2.txt 案例3 --- 将当前目录dir1连通目录下文件其压缩 实例4 --- 向压缩文件中test1.zip中添加test2.txt文件 实例5…

模型评估指标(一)Top-5和Top-1准确率

文章目录 一、前言二、什么是Top-5和Top-1准确率与错误率参考博客 一、前言 在看论文里面提到Top-5和top-1错误率,看了有点懵,所以去了解了一下 二、什么是Top-5和Top-1准确率与错误率 举个例子: 我们在训练完某个分类网络后&#xff0c…

【单目3D】在自动驾驶中将 2D 物体检测提升到 3D

Lifting 2D object detection to 3D in autonomous driving 单目 3D 目标检测使用 RGB 图像来预测目标 3D 边界框。由于 RGB 图像中缺少关键的深度信息,因此该任务从根本上说是不适定的。然而在自动驾驶中,汽车是具有(大部分)已知…

一文通吃:从 ZooKeeper 一致性,Leader选举讲到 ZAB 协议与 PAXOS 算法(上)

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号! 作者:大能 | 慕课网讲师 本文将从ZooKeeper集群如何保证一致性,讲到zookeeper保证数据一致性的协…

打开docker-desktop报错问题解决

打开Ubuntu出现报错 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80070424 Error: 0x80070424 ????????? Press any key to continue... 命令行打开wsl出现报错 C:\Users\jiangcheng>wsl 指定的服务未安装。 Err…

windows环境下编译aws-sdk-cpp踩坑记

目录 1 前言 2 第一次编译 3 第二次编译 3.1 安装配置vcpkg 3.2 升级PowerShell 3.3 升级Cmake版本 3.4 vcpkg编译aws-sdk-cpp 4 工具合集下载 5 参考文献 1 前言 在做图片、视频片段存储技术调研时,从查阅的大量资料中,了解到很多人推荐的开源…

多层网关已成过去,网关多合一成潮流,网关改造正当时丨Higress 正式发布 1.0 版本

作者:Higress 团队 01 前言 K8s 通过 Ingress / Gateway API 将网关标准化,逐步将安全网关、流量网关、微服务网关内聚,解决从单体到微服务到云原生多层网关的复杂度,合久必分,分久必合,多层网关已成过去…

第21章 JQuery DataTables对角色的渲染显示

1 Services.Customers.CustomerServiceDefaults /// <summary> /// 【1个指定用户所对应的所有角色缓存键】 /// <remarks> /// 摘要&#xff1a; /// 设定一个缓存键实例&#xff0c;用于拼接1个指定的缓存键字符串&#xff0c;该缓存键字符与角色实体所有实例…

量化多因子——描述数据(空值、重复值、异常值)

数据清洗是量化的第一步&#xff0c;也是非常关键的一步。 检查数据的空值、重复值、异常值&#xff0c;并进行描述性数据分析&#xff0c;观察数据的分布情况。 缺失值&#xff1a; return_all.info() np.where(np.isnan(return_all)) np.where(np.isinf(return_all)) 重复值&…

基础巩固(五)Android通过WebView与Js交互

文章目录 简介WebView基本使用常用方法WebView的生命周期 / 状态切换关于前进 / 后退网页清除缓存数据 常用类WebSettings类常见用法&#xff1a;设置WebView缓存 WebViewClient类WebChromeClient类 注意事项如何避免WebView内存泄露 使用案例 通过WebView使得native与Js交互An…

k8s安装部署

1、基础环境 所有机器执行以下操作 hostname ipk8s-master192.168.0.121k8s-node1192.168.0.102k8s-node2192.168.0.160 docker version&#xff1a;20.10.7 k8s相关插件version&#xff1a;1.20.9 #各个机器设置自己的域名 hostnamectl set-hostname xxxx# 将 SEL…

Java中令人惊艳的五大算法,你知道多少?

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Golang - 选项模式 vs 构建器模式

在使用Golang创建复杂对象时&#xff0c;常用的两种模式是选项模式&#xff08;Options pattern&#xff09;和构建器模式&#xff08;Builder pattern&#xff09;。这两种模式各有优缺点&#xff0c;选择适合项目需求的模式取决于具体情况。 问题 假设我们想创建一个具有许…

【HTTP 协议】掌握 Web 的核心技术

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a;保护小周ღ 谈起 HTTP 协议&#xff08;超文本传输协议&#xff09;&#xff0c;不知道大家第一次是从什么地方了解到这个协议的呢&#xff1f;在真实的网络环境中网络协议的种类非常多&#xff0c;其中有一些耳熟能详的…

GBASE南大通用5月份公司动态一览

产品动态 5月初&#xff0c;GBASE南大通用两款新产品&#xff1a;GBase 8c V5.0和GBase 8s V8.8.5于鲲鹏开发者大会主论坛商业发行版联合发布仪式上正式发布。新版本与上一版本功能特性保持兼容&#xff0c;并在算子能力、用户级别审计、兼容性等方面全面增强&#xff0c;支持一…

最新版本 Stable Diffusion 开源 AI 绘画工具之微调模型篇

✨ 目录 &#x1f388; 模型种类&#x1f388; 变分自动编码器 / VAE&#x1f388; 美学梯度 / Aesthetic Gradients&#x1f388; 大型语言模型的低阶自适应 / LoRA&#x1f388; 超网络模型 / Hypernetwork&#x1f388; 微调模型 / LyCORIS &#x1f388; 模型种类 当你打开…