MySQL数据库对象与数据备份和还原详解

news/2024/5/20 22:12:38/文章来源:https://blog.csdn.net/Justw320/article/details/131615144

目录

一、视图

1. 什么是视图

2. 视图与数据表的区别 

 3. 视图的优点

 4. 创建视图

二、索引

1. 什么是索引

2. 为什么要使用索引

3. 索引优缺点

4. 何时不使用索引

5. 索引何时失效

6. 索引分类

6.1 普通索引

6.2 唯一索引

6.3 主键索引

6.4 组合索引

三、数据的备份与恢复

1. 使用工具,类似Sqlyog、Navicat等导入导出数据。

1.1 使用工具 Navicat for MySQL导入

1.2 使用工具 Navicat for MySQL导出

2. 使用mysqldump导入导出

2.1 使用mysqldump导入

2.2 使用mysqldump导出

2.2.1 导出表数据和表结构

3. 使用LOAD DATA INFILE(OUTFILE)导入导出

4. 使用LOAD DATA INFILE(OUTFILE)导入导出注意事项


一、视图

1. 什么是视图

        视图 (view) 也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。
        视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。

作用:

        视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证了系统的安全。

 

2. 视图与数据表的区别 

  1. 存储方式:视图是数据的窗口,而表是内容。 数据表是实际存储数据的物理结构,而视图只是一个查询的结果集,并不实际存储数据,其结构和数据是建立在对数据中真实表的查询基础上的。

  2. 数据更新:对于数据表,我们可以直接对其进行插入、更新和删除等操作来修改底层数据。而对于视图,一般情况下是只读的,不能直接对其进行修改。但是在某些情况下,也可以通过视图进行更新操作,这种操作被称为可更新视图(Updatable View)。

  3. 结构定义:数据表具有明确的结构定义,包括列名、数据类型、约束条件等。而视图是基于一个或多个数据表的查询结果,因此它的结构是根据查询语句动态生成的。

  4. 存储空间:数据表在数据库中占据着一定的存储空间,而视图不占用额外的存储空间,它只是一个逻辑上的数据集合。视图的建立和删除只影响视图本身,不影响对应的基本表。

  5. 访问权限:通过设置权限,可以限制用户对数据表的操作权限。而对于视图,我们可以通过它来隐藏底层表的结构和数据,提供更安全的数据访问方式。

  6. 数据处理:数据表通常用于存储和管理大量的数据,支持各种复杂的数据操作,如聚合、排序、分组等。而视图一般用于简化对数据的查询操作,提供一个方便、易读的接口。

        综上所述,视图和数据表在存储方式、数据更新、结构定义、存储空间、访问权限和数据处理等方面都存在一些差异。视图主要用于提供一种逻辑上的数据展现方式,简化复杂查询并保护敏感数据,而数据表则是实际存储和管理数据的物理结构。

 3. 视图的优点

1. 逻辑数据独立性,聚焦特定的数据

在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。 

视图可以提供逻辑数据独立性,即应用程序与底层表的结构解耦。通过访问视图而不是直接访问底层表,即使底层表的结构发生变化,只需调整相应的视图定义,而不会影响应用程序的逻辑。

2. 简化数据访问

视图允许我们将复杂的查询逻辑封装到一个简洁的接口中。通过定义视图,可以隐藏底层表的结构和关联操作,使得用户只需执行简单的查询语句即可获取所需的数据,而无需了解复杂的数据库结构和查询语句。

3. 提高数据的安全性

视图是虚拟的,物理上是不存在的。通过视图,我们可以对敏感数据进行保护。通过控制视图的访问权限,可以限制用户只能查看或修改特定列或行的数据,从而确保敏感数据的安全性。

4. 共享所需数据

通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。

5. 更改数据格式

通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。

6. 数据冗余和一致性

通过视图,可以消除数据冗余问题。当多个应用程序需要使用相同数据的子集时,可以创建视图来封装这些子集,从而减少数据冗余。此外,由于视图是基于底层表的查询结果生成的,因此视图的数据会随着底层表的数据变化而自动更新,确保数据的一致性。

        总体而言,视图提供了一种灵活且安全的数据访问方式,能够简化复杂查询、提高数据安全性、减少数据冗余,并提供逻辑独立性。这些优点使得视图成为数据库中强大且重要的工具之一。

 

 4. 创建视图

可以使用 CREATE VIEW 语句来创建视图。语法格式如下:

CREATE VIEW <视图名> AS <SELECT语句>

语法说明如下。

  • <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。

  • <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

注意:

 当创建视图时如遇错 Duplicate 说明表中出现相同字段名,因为我们经常需要设置这样的字段来与其他表进行关联,所以在建视图时,我们需修改指定查询的字段避免出现相同的字段。

这样我们就可以根据视图名查询到该sql语句的数据

 

对于创建视图中的 SELECT 语句的指定存在以下限制:

  • 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。

  • SELECT 语句不能引用系统或用户变量。

  • SELECT 语句不能包含 FROM 子句中的子查询。

  • SELECT 语句不能引用预处理语句参数。

二、索引

1. 什么是索引

        索引是数据库中用于提高数据检索效率的一种数据结构。它类似于书籍的目录,通过创建索引可以快速定位到特定的数据行,而无需扫描整个数据表。

        在数据库中,索引是基于一个或多个列的值创建的,它们包含了列值和对应数据行的物理存储位置的映射关系。当执行查询操作时,数据库引擎可以使用索引来快速定位满足查询条件的数据行,从而加快查询速度。

2. 为什么要使用索引

        索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表。

        索引是数据库中用来加快数据检索速度的重要工具,是数据库性能调优技术的基础。使用索引可以提高查询的效率,减少数据库系统的负载。常用于实现数据的快速检索!

在 MySQL 中,通常有以下两种方式访问数据库表的行数据:

1. 顺序访问

顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。

顺序访问实现比较简单,但是当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量的时间,显然会影响数据库的处理性能。

2. 索引访问

索引访问是通过遍历索引来直接访问表中记录行的方式。

使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。

简而言之,不使用索引,MySQL 就必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间。

3. 索引优缺点

索引有其明显的优势,也有其不可避免的缺点。

优点

索引的优点如下:

  • 通过创建唯一索引可以保证数据库表中每一行数据的唯一性。

  • 可以给所有的 MySQL 列类型设置索引。

  • 可以大大加快数据的查询速度,这是使用索引最主要的原因。

  • 在实现数据的参考完整性方面可以加速表与表之间的连接。

  • 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间

缺点

增加索引也有许多不利的方面,主要如下:

  • 创建和维护索引组要耗费时间,如果过度使用索引,数据库可能需要花费更多时间来维护和更新索引结构,从而影响整体性能。因此,需要根据具体情况选择适当的索引。

  • 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。

  • 当对包含索引的列进行插入、更新或删除操作时,数据库不仅需要更新数据本身,还需要更新相应的索引。这可能导致更新操作变慢。

索引可以提高查询速度,但是会影响插入记录的速度。因为,向有索引的表中插入记录时,数据库系统会按照索引进行排序,这样就降低了插入记录的速度,插入大量记录时的速度影响会更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据,插入完成后,再创建索引。

        综上所述,索引是提高数据库性能和查询效率的重要手段,但在使用索引时需要根据具体情况进行权衡和优化。

4. 何时不使用索引

  • 表记录太少

  • 经常增删改的表

  • 数据重复且分布均匀的表字段,只应该为经常查询和最经常排序的数据列建立索引(如果某个数据类包含太多的重复数据,建立索引没有太大意义)

  • 频繁更新的字段不适合创建索引(会增加IO负担)

  • where条件里用不到的字段不创建索引

5. 索引何时失效

  • like以通配符%开头索引失效

  • 当全表扫描比走索引查询的快的时候,会使用全表扫描,而不走索引

  • 字符串不加单引号索引会失效

  • where中索引列使用了函数(例如substring字符串截取函数)

  • where中索引列有运算(用了< or > 右边的索引会失效,用<= or >= 索引不会失效)

  • is null可以走索引,is not null无法使用索引(取决于某一列的具体情况)

  • 复合索引没有用到左列字段(最左前缀法则,如果没用用到最左列索引,或中间跳过了某列有索引的列,索引会部分失效)

  • 条件中有or,前面的列有索引,后面的列没有,索引会失效。想让索引生效,只能将or条件中的每个列都加上索引

 

6. 索引分类

6.1 普通索引

普通索引是最基本的索引,它没有任何限制;

  • 创建索引语法:

create index index_name on table(column);

  • 修改表结构方式添加索引:

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

  • 删除索引

DROP INDEX index_name ON table

6.2 唯一索引

唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

CREATE UNIQUE INDEX indexName ON table(column(length))

6.3 主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个。

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ) ;

6.4 组合索引

组合索引指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。

ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);

        这些是常见的索引分类,还有辅助索引、聚集索引等等...... 每种类型的索引都有其自身的特点和适用场景。在设计数据库时,根据具体的需求和数据访问模式,选择合适的索引类型非常重要。

三、数据的备份与恢复

1. 使用工具,类似Sqlyog、Navicat等导入导出数据。

1.1 使用工具 Navicat for MySQL导入

 

步骤1:

 

步骤2: 

 

 

 步骤3:

1.2 使用工具 Navicat for MySQL导出

步骤1:选择需要导出文件内容

 

步骤2:选择需要导出的文件位置

 

❕ 使用Navicat工具导入导出因个人电脑性能而异处理时间有所差异。这种方式是最慢的!

2. 使用mysqldump导入导出

2.1 使用mysqldump导入

语法:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql(这个名字随便叫)

必须在mysql安装路径里的bin文件里运行cmd

1. 首先创建一个数据库

2. 使用数据库并设置编码集

 3. 通过 source 命令输入sql路径即可

 

2.2 使用mysqldump导出

2.2.1 导出表数据和表结构

doc命令: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql

 

3. 使用LOAD DATA INFILE(OUTFILE)导入导出

导出:select * from 表名 into outfile '/文件名.sql'

导入:load data infile '/文件名.sql' into table 表名(列名1,...)

 

4. 使用LOAD DATA INFILE(OUTFILE)导入导出注意事项:

 如果在my.ini 文件配置中没有设置 secure_file_priv=磁盘名 就没有权限导入导出数据

 则会报一下错误

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Integration Objects OPC 所有产品Crack

OPC产品 OPC UA 升级到 OPC UA 以提高互操作性和安全性。 OPC 隧道 无需 DCOM 即可实现安全可靠的连接。 OPC 数据归档 将 OPC 数据存储到标准数据库或 CSV 文件中。 OPC 服务器 将任何通信协议转换为OPC标准。 OPC 客户端 读取、写入和传输您的 OPC 数据。 OPC 服务器工具…

axios的学习

axios是基于promise对ajax的一种封装 //将省份信息打印到网页上 <p class"my-p"></p> <script src"https://unpkg.com/axios/dist/axios.min.js"></script> <script>axios({url:http://hmajax.itheima.net/api/province}).…

图形学 | 期末复习(上)| games101笔记 | 补档

博客基于GAMES101-现代计算机图形学入门-闫令琪&#xff0c;但不是其完整笔记&#xff0c;基于复习要求有一定的删减。考试以图形学入门基本概念和核心研究内容为主&#xff0c;少量公式。即以论述概念为主&#xff0c;涉及少量算法。p1:29:12是对应的games101视频节点&#xf…

在阿里云上部署Springboot项目

文章目录 环境准备1.安装jdk2.安装mysql3.开启端口 上传项目1.数据库上传2.项目上传 环境准备 1.安装jdk 查看系统中原来是否含有java环境 rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj其中&#xff0c;gcj是一个轻巧的&#xff0c;性能优越的Java语言编译器。它…

基于深度学习的高精度球场足球检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度球场足球检测识别系统可用于日常生活中或野外来检测与定位球场足球目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的球场足球目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

【考研408计算机组成原理】第三章存储系统 第五节cache

3.5.1工作原理 局部性原理&#xff1a;在最近可能会使用到周围的数据和指令。 性能分析&#xff1a;访问数据的时间 例题&#xff1a; 提出问题 知识总结 3.5.2 cache和主存的映射方式 3.5.3 替换算法 3.5.4 cache写策略

确保无缝、安全的云转型

随着云计算继续主导数字化转型&#xff08;这是理所当然的&#xff09;&#xff0c;组织面临着双重挑战&#xff1a;将运营无缝转移到云并确保这种转型的安全。 虽然云的采用保证了可扩展性、成本效率和生产力的提高&#xff0c;但保持警惕对于组织防范网络安全威胁和安全漏洞…

Nuxt3引入Element-plus和sass

1.引入Element-plus 打开编辑器终端 运行npm install element-plus/nuxt 或者命令行cd到项目文件 运行npm install element-plus/nuxt package.json文件会出现 使用Element-plus 在nuxt.config.ts文件添加代码 export default defineNuxtConfig({devtools: { enabled: true }…

<数据结构>NO9.选择类排序|直接选择排序|堆排序

文章目录 选择排序1.直接选择排序优化直接选择排序 2. 堆排序 选择排序 基本思想 选组排序是从待排序数据中选出最大/最小的元素放入到序列的起始位置&#xff0c;直到待排序数据全部有序。 直接选择排序和堆排序的基本思想均符合选择排序。 1.直接选择排序 假设数据按升序…

深入理解java虚拟机精华总结:硬件的效率与一致性、Java内存模型、Java与线程、Java与协程

深入理解java虚拟机精华总结&#xff1a;硬件的效率与一致性、Java内存模型、Java与线程、Java与协程 硬件的效率与一致性Java内存模型主内存与工作内存内存间交互操作对于volatile型变量的特殊规则针对long和double型变量的特殊规则原子性、可见性与有序性原子性可见性有序性 …

离线环境下安装微软Visual Studio 2022 生成工具

1. 前言 最近&#xff0c;在学习cython的时候&#xff0c;需要安装windows下的C/C编译、链接工具。开始觉得传统的msvc太大了&#xff0c;想要尝试Mingw&#xff0c;但是都是编译错误。无奈之下&#xff0c;还是要安装msvc。 微软提供了Visual Studio 2022 Build Tools &…

【华为机试】HJ16 购物单详解+完整源代码示例

从毕业到入职&#xff0c;忙于各种事情&#xff0c;所以博客一直也没有空更新。从入职到现在差不多整三个月了&#xff0c;刚刚在比亚迪这边转正。目前干的工作涉及到开发的工作不是很多&#xff0c;但是又怕之前的技能荒废了。所以最近有个想法&#xff0c;再把C算法和数据结构…

【CSS】跳动文字

文章目录 效果展示代码实现 效果展示 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>一颗不甘坠落的流星</title></head><style type"text/css">/* 遮罩盒子样式 */#mask {/* 设…

RabbitMQ系列(27)--RabbitMQ使用Federation Exchange(联邦交换机)解决异地访问延迟问题

前言&#xff1a; (broker北京)、(broker深圳)彼此之间相距甚远&#xff0c;网络延迟是一个不得不面对的问题。有一个在北京的业务(Client北京&#xff09;需要连接(broker北京),向其中的交换器exchangeA发送消息&#xff0c;此时的网络延迟很小,(Client北京)可以迅速将消息发…

Android studio 引入不了R包,手动引入显示红色。可以跑起来却没问题

之前在这个问题踩坑2次&#xff0c;遂记录一下。 问题是&#xff1a;工程里找不到自己包名的R&#xff0c;手动导入显示红色&#xff0c;Run起来倒是没问题 尝试过Clean&#xff0c;Rebuild&#xff0c;清缓存&#xff0c;重启&#xff0c;都没用。 最终发现是没有在 Android…

回溯法解决地图填色问题

目录 回溯法 最大度优先 最少可选颜色优先 向前探测 随机产生不同规模的图&#xff0c;分析算法效率与图规模的关系&#xff08;四色&#xff09; 回溯法 回溯法的基本思想是采用递归和深度优先搜索的方法&#xff0c;尝试在一组可能的解中搜索出符合要求的解&#xff0c…

git bash---打开当前路径所在文件夹

0 Preface/Foreword 在Windows操作系统中使用git bash时&#xff0c;可以通过命令直接打开当前路径下的文件夹&#xff0c;命令如下 explorer .

机器学习之多元微积分

机器学习的多元微积分跟高等数学中的多元微积分有很多不同之处。 矩阵求导也是一样的&#xff0c;本质就是每个函数分别对矩阵或者向量中的每个元素逐个求偏导&#xff0c;只不过写成了向量、矩阵形式而已。 机器学习中的变量都是向量或者矩阵机器学习中的函数一般都是线性函…

前端vue入门(纯代码)24_Modules

穷不怪父&#xff0c;苦不责妻&#xff0c;方为真男人&#xff01; 【23.Vuex中的模块化和命名空间】 [可以去官网看看Vuex3文档](Module | Vuex (vuejs.org)) 由于使用单一状态树&#xff0c;应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时&#xff0c;sto…

ElasticSearch学习笔记一——下载及安装

最近发现ES是个很重要的内容啊&#xff0c;各种大厂都会使用ES来做一些大范围的搜索之类的功能&#xff0c;所以今天我们也来学习一下。 首先我们要准备Java的环境&#xff0c;推荐版本8、11、14 ES官方的JDK兼容性列表(有些慢&#xff0c;需要耐心等待一下哈) 在我写文章时&…