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存储引擎。该存储引擎支持事务、行级锁、外键等。

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

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

相关文章

基于SpringBoot的饭店外卖平台的设计与实现

项目描述 这是一款基于SpringBoot的饭店外卖平台的系统 模块描述 用户端 登录 首页 商家信息 点餐 菜品列表 下单 订单列表 账号下单列表 个人中心 个人资料 修改信息 评论管理 评论菜品 查看评论 打赏骑手 打赏骑手 管理员 登录 菜品管理 修改 下架 订单列表 下单记录 菜品管理…

nginx 负载均衡、反向代理实验

nginx 负载均衡、反向代理实验 实验目的 理解概念:明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能:学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用:通过实际操作,体验Nginx如何提升Web服务的可…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库,它是 TinyXML 的一个改进版本,专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库,并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…

远程工作的数据安全挑战和解决策略

随着远程工作的普及,数据安全面临了前所未有的挑战。企业在应对这些挑战时,必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略: 数据安全挑战 设备丢失或被盗:员工在外工作时&#xff0c…

ldap对接jenkins

ldap结构 配置 - jenkins进入到 系统管理–>全局安全配置 - 安全域 选择ldap - 配置ldap服务器地址,和配置ldap顶层唯一标识名 配置用户搜索路径 - 配置管理员DN和密码 测试认证是否OK

AIGC技术带给我们什么?基于AIGC原理及其技术更迭的思考

AIGC技术带给我们什么?基于AIGC原理以及技术更迭的思考 前言 AI,这个词在如今人们的视野中出现频率几乎超过了所有一切其他的事物,更有意思的是,出现频率仅次于这个词的,几乎都会加上一个修饰亦或是前缀——AI&#…

ROS机器人实用技术与常见问题解决

问题速查手册(时实更新)更加全面丰富的问题手册记录 1.机器人使用GPARTED挂载未分配空间 需要在图型界面下操作,建议使用no machine连接 安装gparted磁盘分区工具, sudo apt-get install gparted -y 启动软件 sudo gparted 点击磁盘/内存…

如何使用vue脚手架创建项目

前言 使用vue搭建项目的时候,我们可以通过对应的cmd命令去打开脚手架,然后自己配置对应的功能插件 说明: 要使用Vue脚手架创建项目,你需要先确保你已经安装了Node.js和npm(Node.js的包管理器)。然后&#…

热敏电阻怎么进行性能测试?并以LabVIEW为例进行说明

过程也可用于执行热敏电阻测量。RTD和热敏电阻遵循非常相似的功能原理,测量步骤与下面提供的步骤相同。有关热敏电阻的更多信息,请参阅本文档。 查找设备引脚排列 在连接任何信号之前,请找到您的设备引脚排列。 打开NI MAX并展开设备和接口。…

视频素材库在哪里找免费手机版?8个可以用手机浏览的素材网

在视觉内容占据主导地位的今天,合适的视频素材可以大大提升项目的吸引力和效果。以下列出的视频素材网站为广告制作者、社交媒体策略师及电影制作人提供了从传统到现代风格的各种视频素材选择,满足不同的创作需求。 1. 蛙学府(中国&#xff…

PyGame 文字显示问题及解决方法

在 Pygame 中显示文字时可能会遇到一些问题,例如文字显示不清晰、字体不正确或者文字位置不准确等。以下是一些常见的问题及其解决方法,具体情况可以看看情况。 1、问题背景 一位用户在使用 PyGame 库进行游戏开发时,遇到了一个问题&#xf…

服务器关机前未退出xampp导出MySQL无法启动

背景解决 五一放假,服务器关机了,但是关机前没有正常关闭数据库服务,导致数据库无法启动! 查看错误日志如下 从报错信息可以看出是MySQL这个服务相关文件出现问题了,解决思路:重新安装xampp 重新安装xam…

automa警惕通过点击元素打开新的标签页,因为你可能会被他蒙蔽!

大家好,我是大胡子,专注于研究RPA实战与解决方案。 我们经常用到automa里面的【点击元素】组件,但要警惕通过点击元素打开新的标签页,例如下面这个场景,点击公众号的图文消息,之后,要自动输入标…

self-attention 的 CUDA 实现及优化 (上)

self-attention 的 CUDA 实现及优化 (上) 导 读 self-attention 是 Transformer 中最关键、最复杂的部分,也是 Transformer 优化的核心环节。理解 self-attention ,对于深入理解 Transformer 具有关键作用,本篇主要就围绕 self-attention 展…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

ILI9341显示驱动芯片的使用

ILI9341是一种常见的TFT LCD显示驱动芯片,它在众多的应用中都有广泛的使用。这种芯片的一个显著特点是它支持16位RGB565颜色,这意味着它可以显示多达65536种不同的颜色。这使得ILI9341能够提供鲜艳、生动的色彩效果,对于需要表现丰富色彩的应…

【进程终止】退出信号 | 三种退出情况 | 如何进程终止returnexit_exit

目录 退出码 退出信号 进程终止情况3 如何进程终止 return退出 库函数exit 系统调用函数_exit ​exit和_exit的区别缓冲区 exit _exit 退出码 回顾上篇 代码跑完,结果正确(退出码为0)代码跑完,结果不正确(退…

SpringDI方式及Redis应用场景的分享

1、为什么Spring和IDEA 都不推荐使用 Autowired 注解 大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解Autowired后会出现如下警告Field injection is not recommended (字段注入是不被推荐的);但是使用Resource却不会…

Python基础详解二

一,函数 函数是组织好的,可重复使用的,用来实现某个功能的代码段 def myMethod(data):print("数据长度为",len(data))myMethod("dsdsdsds") 函数的定义: def 函数名(传入参数):函数体return 返回值 def m…