MySql数据库(概念篇)

数据库概念

什么是数据库

数据库见名之意,就是用来存储数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
没接触数据库之前,一般都是将数据存储在文件中。比如execl文件,word文件中。但是用文件保存数据对比数据库保存数据,文件保存数据存在以下几个缺点:

  • 文件的安全问题
  • 文件不利于数据查询和管理
  • 文件不利于处理海量数据
  • 文件在程序中控制不方便

总的来说数据库相比文件更适合于处理复杂的、多用户访问的数据,并且能够提供更高的安全性、性能和灵活性。
为了解决这个问题,大佬们就设计出了一种更加利于管理数据的东西->数据库。它能更能高效的管理数据。

主流的数据库

  • MySQL: MySQL 是一个流行的开源关系型数据库管理系统,广泛应用于 Web 应用程序和企业级解决方案中。
  • Oracle Database: Oracle Database 是一个功能强大的商业关系型数据库管理系统,适用于大型企业级应用。
  • Microsoft SQL Server: Microsoft SQL Server 是由微软开发的关系型数据库管理系统,适用于 Windows 平台,广泛用于企业级解决方案。
  • PostgreSQL: PostgreSQL 是一个强大的开源关系型数据库管理系统,具有高度可定制性和扩展性。
  • MongoDB: MongoDB 是一个流行的开源非关系型数据库管理系统,采用文档存储模型,适用于大规模的数据存储和处理。
  • SQLite: SQLite 是一个轻量级的嵌入式关系型数据库管理系统,适用于移动应用程序和小型设备。
  • IBM Db2: IBM Db2 是一个功能丰富的商业关系型数据库管理系统,适用于企业级应用和大型数据处理。
  • Amazon Aurora: Amazon Aurora 是亚马逊提供的关系型数据库服务,兼具高性能、可扩展性和可用性。

这些数据库各自有其特点和适用场景,选择合适的数据库取决于项目需求、性能要求、数据量、可扩展性和预算等因素。

数据库可以通过网络提供服务。数据库通常作为一个独立的软件运行在服务器上,并通过网络接口来提供对数据的访问和管理。这意味着客户端应用程序可以通过网络连接到数据库服务器,并发送查询、更新和其他操作请求,以访问或修改数据库中的数据。

数据库分为客户端和服务器两种。在本地连接数据库时,一般会使用下面的命令:mysql -uroot -p

image.png
输入密码后,就可以连接到本地数据库了。这种没有指定远程ip地址和端口号,默认就是连接本地回环地址127.0.0.1和默认端口3306的。

如果要连接远程数据库,则需要指定ip地址和端口号mysql -h 127.0.0.1 -P 3306 -u root -p

  • h: 表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。
  • P: 表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。
  • u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。
  • p: 表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。

注意,要连接远程MySql服务,本地MySql客户端和服务器MySql版本要一致。

在服务器上使用ps命令就能查看到mysqld进程信息。mysqld就是服务器上为mysql提供服务的进程。

image.png

使用netstat也能查看到mysqld进程处于LISTEN状态进行监听。底层使用的协议是TCP6协议(TCP6 是指在 IPv6 网络上运行的 TCP 协议)。默认的端口是3306。

image.png

MySQL服务器本质是一个网络服务器,我们使用mysql命令连接MySQL服务器时,本质就是MySQL客户端在向服务器mysqld进程发起连接请求,连接建立成功后MySQL客户端就会将用户输入的SQL语句发送给服务器mysql进程,之后服务器mysql进程就会根据SQL语句对数据进行对应的操作并把结果返回给客户端。

image.png

数据库存储介质

数据库存储介质通常可以分为两类:磁盘存储和内存存储。

  • 磁盘存储

    • 比如MySQL就是一种磁盘数据库。
  • 内存存储

    • 比如redis就是一种内存数据库。
  • 数据库按照数据存储介质分为两类,磁盘数据库和内存数据库,其中内存数据库又称为主存数据库(Main Memory Database)。

  • 磁盘数据库的数据主要存储在磁盘上,因此磁盘数据库在数据的持久化保存上有明显优势。但磁盘数据库为了提高数据的存储效率,也有自己对应的缓存机制,因此在某一个时刻之内,不一定所有数据都会被刷新到磁盘上。

  • 内存数据库的数据主要存储在内存中,与磁盘数据库相比,内存数据库可以大大提高读取速度,减少数据库的访问时间。但内存数据库并非完全不使用磁盘,数据库的启动信息、初始数据等还是需要存储在磁盘上的,只是数据主要在内存中进行存储和运算。

  • 由于内存数据库的数据存储在内存中,数据库主机掉电后数据就会丢失,因此在数据库服务关闭前通常需要把内存中的数据转储到磁盘上,甚至在内存数据库运行期间,一些数据也会持久化到磁盘存储。

服务器,数据库,表的关系

  • 所谓的安装数据库服务器就是在服务器上安装了一个数据库管理程序,这个程序可以管理多个数据库。一般的开发会针对每个要开发的程序创建一个数据库。
  • 保存应用中的实体数据,一般会在数据库中创建多个表,用来保存程序中的数据。
  • 而所谓的建库,就是服务器上mysqld进程在其目录下创建一个目录,建表就是在目录下创建一个文件。

在mysql 中使用show global variables like "%datadir%";命令查看存储路径(这里是Linux系统,window下也是一样的)。

image.png

使用create database创建数据库,就会在存储路径/var/lib/mysql/下新建一个目录

image.png
新建好的库中,默认有一个db.opt文件。该文件中指明了当前数据库的默认字符编码和字符校验规则

image.png
这里的字符编码和校验规则都是UTF-8。一般情况下,如果没有特殊的需求,这个文件不需要手动编辑或创建。
image.png
在库中创建表就是在对应的目录下创建文件

image.png
.frm是表结构文件。 .ibd是表数据和索引的文件。

SQL分类

SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

  • DDL(Data Definition Language)数据定义语言,用来维护存储数据的结构。比如create语句、drop语句、alter语句等。
  • DML(Data Manipulation Language)数据操作语言,用来对数据进行操作。比如insert语句、delete语句、update语句等。
    • DML中又单独分了一个DQL(Data Query Language)数据查询语言,比如select语句、from语句、where语句等。
  • DCL(Data Control Language)数据控制语言,主要负责权限管理和事务。比如grant语句、revoke语句、commit语句。

MySql架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体 系结构的一致性。

MySql架构图如下:

image.png

  • 客户端连接器:它负责与服务器建立连接、发送查询请求、接收查询结果和处理与服务器的通信。MySQL 支持多种客户端连接器,其中最常见的是标准 MySQL 客户端连接器(mysql)以及各种编程语言提供的 MySQL 客户端。
  • 连接池和线程管理器: MySQL 使用连接池和线程管理器来管理客户端连接。连接池负责管理和维护数据库连接,而线程管理器负责管理处理客户端请求的线程。
  • SQL 接口: SQL 接口允许客户端通过 SQL 语句与 MySQL 服务器进行通信。客户端可以使用多种编程语言(如 PHP、Python、Java 等)提供的 API 来与 MySQL 服务器进行交互。
  • 解析器和优化器: MySQL 使用解析器解析客户端发送的 SQL 语句,并将其转换为内部数据结构。优化器负责分析 SQL 查询,并生成执行计划以提高查询性能。
  • 缓存管理器: MySQL 使用缓存管理器来管理查询缓存。查询缓存存储先前执行过的查询结果,以提高查询性能。
  • 存储引擎: MySQL 支持多种存储引擎,包括 InnoDB、MyISAM、MEMORY、CSV 等。存储引擎负责管理数据的存储和检索,并提供不同的特性和性能优势。由多种可拔插的存储引擎共同组成,真正负责MySQL中数据的存储和提取,每个存储引擎都有自己的优点和缺陷,服务层是通过存储引擎API来与它们交互的。

MySql存储引擎

存储引擎是数据库系统中负责管理数据存储和检索的组件,它定义了数据在磁盘上的存储格式、索引方式、事务支持等特性。不同的存储引擎可以提供不同的性能、功能和特性,以满足不同的应用需求。

在 MySQL 中,常见的存储引擎包括但不限于:

  1. InnoDB: InnoDB 是 MySQL 默认的存储引擎,它提供了事务支持、行级锁、外键约束、崩溃恢复等功能,适合于需要高并发和事务支持的应用场景。
  2. MyISAM: MyISAM 是 MySQL 中另一个常见的存储引擎,它不支持事务和行级锁,但提供了全文索引、压缩表格等特性,适合于读操作较多的应用场景。
  3. MEMORY: MEMORY 存储引擎将数据存储在内存中,速度非常快,但数据在 MySQL 服务器关闭时会丢失,适合于临时数据存储和高速缓存。
  4. CSV: CSV 存储引擎将数据以 CSV 格式存储在文件中,适合于导入和导出数据。
  5. Archive: Archive 存储引擎提供了高度压缩的存储格式,适合于存储大量历史数据。
  6. NDB Cluster: NDB Cluster 存储引擎用于 MySQL Cluster,提供了分布式存储和高可用性特性,适合于大规模、高可用的分布式应用

使用show engines可以查看MySql支持的存储引擎。

image.png
MySql默认使用的是InnoDB存储引擎。该存储引擎支持事务、行级锁、外键等。

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

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

相关文章

基于 Dockerfile 部署 LNMP 架构

目录 前言 1、任务要求 2、Nginx 镜像创建 2.1 建立工作目录并上传相关安装包 2.2 编写 Nginx Dockerfile 脚本 2.3 准备 nginx.conf 配置文件 2.4 生成镜像 2.5 创建 Nginx 镜像的容器 2.6 验证nginx 3、Mysql 镜像创建 3.1 建立工作目录并上传相关安装包 3.2 编写…

flink sql 优化

文章目录 一、参数方面二、资源方面三、总结 提示:实时flink sql 参考很多网上方法与自己实践方法汇总(版本:flink1.13) 一、参数方面 flink sql参数配置 //关闭详细算子链(默认为true),true后job性能会略微有提升。false则可以展示更详细的DAG图方便地位性能结点…

4. HBuilderX中的插件商城

前言 在HBuilderX中有一个插件市场,这个和VSCode的插件库不太像,硬要做个简单类比的话,个人认为HBuilderX中的插件市场更像是npm库,它里面有许多其他开发者开发的插件,这些插件更多的是为uniapp服务的,比如…

第23章 微内核架构软件测试(下午题)

一、微内核架构概述 (一)概念 1、微内核架构 微内核:精简的内核 宏内核:中央集权控制中心 核心系统 能运行的最小模块插件模块 专业处理,额外特性的独立组件增加/扩展核心系统的业务逻辑能力连接方式 OSGI、消息机…

springAI框架学习总结

springAI 1.springAI基本介绍 springAI是一个AI工程应用框架,其目标是将 Spring 生态系统设计原则(例如可移植性和模块化设计)应用于 AI 领域,并推广使用 POJO 作为 AI 领域应用程序的构建块。 2.特性 灵活的AIP支持chat,text…

WPF之绑定属性值转换

1&#xff0c;使用Binding.Format属性简易设置绑定的属性数据显示格式。 <TextBox Grid.Row"2" Grid.Column"1"><TextBox.Text><Binding Path"UnitCost" StringFormat"{}{0:C3}" > …

[论文笔记]Longformer: The Long-Document Transformer

引言 今天带来论文Longformer: The Long-Document Transformer的笔记。 基于Transformer的模型由于其自注意力操作而无法处理长序列&#xff0c;该操作随着序列长度呈二次扩展。为了解决这一限制&#xff0c;本篇工作提出了Longformer&#xff0c;其注意力机制随着序列长度呈…

Edge扩展应用程序的上架流程

前言 在软件开发的生命周期中&#xff0c;发布流程是将产品推向市场并交付给用户的关键阶段。它不仅标志着一个项目从开发阶段到用户手中的转变&#xff0c;也是确保软件质量和用户体验的重要环节。那么一个清晰、高效且可重复的发布流程对于任何软件项目的成功至关重要&#…

CMakeLists.txt语法规则:提供信息的变量说明一

一. 简介 前面几篇文章学习了 CMakeLists.txt语法中 部分常用命令。 接下来学习CMakeLists.txt语法中部分常用变量&#xff0c;变量也是 cmake 中的一个重头戏&#xff0c;cmake 提供了很多内置变量。每一个变量都有它自己的含义&#xff0c;可以通过如下链接地址查询到所有…

环保设备在线监控系统

随着环保意识的日益提升&#xff0c;对环境污染的监控与管理成为了我们不可忽视的重要任务。在这个背景下&#xff0c;HiWoo Cloud平台凭借其强大的环保设备在线监控系统&#xff0c;为环保事业注入了新的活力&#xff0c;助力我们共同迈向绿色未来。 一、环保设备在线监控系统…

jsPDF + html2canvas + Vue3 + ts项目内,分页导出当前页面为PDF、A 页面内导出 B 页面的内容为PDF,隐藏导出按钮等多余元素

jsPDF html2canvas Vue3 ts Arco Design项目&#xff0c;分页导出当前页面为PDF、A 页面内导出 B 页面的内容为PDF&#xff0c;隐藏导出按钮等多余元素… 1.下载所需依赖 pnpm install --save html2canvaspnpm install --save jspdf引入依赖 <script setup lang"…

JavaScript —— APIs(五)

一、Window对象 1. BOM&#xff08;浏览器对象模型&#xff09; 2. 定时器-延时函数 ①、定义 ②、定时器比较 ③、【案例】 3. JS执行机制 4. location对象 注意&#xff1a;hash应用 不点击页面刷新号&#xff0c;点击刷新按钮也可以实现页面刷新 【案例】 5. navig…

WAF防火墙可以给您解决什么问题?哪些情况下使用WAF最适合?

一、什么是WAF&#xff1f; Web应用防护系统&#xff08;也称为&#xff1a;网站应用级入侵防御系统。英文&#xff1a;Web Application Firewall&#xff0c;简称&#xff1a;WAF&#xff09;。利用国际上公认的一种说法&#xff1a;Web应用防火墙是通过执行一系列针对HTTP/H…

Occlum原理解析及使用说明

目录 一、设计初衷 二、背景知识 1.什么是可信计算 2.什么是TEE 3.传统SGX SDK的问题 三、Occlum 1.如何使用 2.特点 3.如何使用 1.Docker部署 1 硬件支持 2 环境 3 拉取镜像创建虚机 4 简单验证 4.Occlum中gcc编译 1 交叉编译 2 初始化Occlum实例 3 Occlum构…

如何更好的使用cpm

nvidia发布了RAFT库&#xff0c;支持向量数据库的底层计算优化&#xff0c;RAFT 也使用CMake Package Manager( CPM )和rapids-cmake管理项目&#xff0c;可以方便快捷的下载到需要的对应版本的thirdparty的依赖库&#xff0c;但是&#xff0c;一般情况下&#xff0c;项目是直接…

数据库复习1

1.试述数据、数据库、数据库管理系统、数据库系统的概念 1.数据(Data): 数据是关于事物的符号表示或描述。它可以是任何事实、观察或者测量的结果&#xff0c;如数字、字符、声音、图像等。数据在没有上下文的情况下可能没有明确的意义。 2.数据库(Database): 数据库是一个持…

面试题:集合篇

说说 List, Set, Queue, Map 四者的区别&#xff1f; List(对付顺序的好帮手): 存储的元素是有序的、可重复的。Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序&#xff0c;存储的元素是有序的、可重…

传输层协议 TCP UDP协议 解析(二)

文章目录 UDP&#xff1a;用户数据报协议UDP报文格式TCP与UDP的区别 UDP&#xff1a;用户数据报协议 UDP是一种面向无连接的传输层协议&#xff08;数据一直发送&#xff0c;没有ack&#xff0c;所以不需要考虑ack&#xff09;&#xff0c;传输可靠性没有保证。 UDP不提供重传…

Rust 实战thiserror+自定义错误消息体

导航 一、背景二、实践1、导入thiserror2、自定义错误消息体&#xff08;1&#xff09;创建ErrMsg.rs和创建自定义结构体&#xff08;2&#xff09;lib.rs添加ErrMsg&#xff08;3&#xff09;main函数&#xff08;4&#xff09;完整代码 一、背景 开发中遇到需要通用、能够满…

Note-backbone预训练权重对模型收敛速度的影响和mmlab实验测试

简介 在训练一些复杂模型时候&#xff0c;通常会考虑读取backbone的预训练权重&#xff0c;这种方法有以下好处&#xff1a; 初始化网络参数&#xff1a;在深度学习模型训练过程中&#xff0c;通常需要随机初始化神经网络的参数。然而&#xff0c;如果采用Backbone预训练权重进…