当前位置: 首页 > article >正文

MySQL基础 [一] - 数据库基础

目录

什么是数据库 

站在服务器角度理解

站在用户角度理解

为什么不直接使用文件存储呢?

主流数据库

MySQL的基本使用

数据库的使用样例 

服务器管理 

服务器数据库表之间的关系 

MySQL的架构

MySQL语句分类 

存储引擎

查看存储引擎

存储引擎对比


什么是数据库 

站在服务器角度理解

mysql它是数据库服务的客户端

mysqld它是数据库服务的服务器端

mysql本质:基于CS模式的一种网络服务 

他是基于TCP协议,端口号是3306

站在用户角度理解

mysql是一套给我提供数据存储的网络程序

数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据--将来在磁盘上存储的一套数据库方案

数据库服务一般只的是mysqld

为什么不直接使用文件存储呢?

文件保存数据有以下几个缺点:

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

一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理能力(用户角度)

也就是说数据的提取分析过程,是需要程序员去自己解决的,文件提供的就只是基本的读写能力,未来对内容的增删改查都需要程序员去自己查看,这是非常麻烦的事情 

    数据库的本质:对数据内存存储的一套解决方案,你给我字段或者要求(mysql客户端下发的),我(mysqld)直接给您结果!

    它允许我们以结构化的方式存储、查询和管理数据。对外提供的是一套存储解决方案

    下面我举个例子

    假设你需要存储和管理一个电子商务网站的产品信息:

    你的要求:我需要查看所有价格在100-200元之间的电子产品。

    数据库响应

    产品ID | 产品名称      | 分类    | 价格  | 库存
    -------------------------------------------------
    101   | 蓝牙耳机      | 电子    | 159   | 45
    103   | 智能手环      | 电子    | 199   | 23
    107   | 便携充电宝    | 电子    | 129   | 78

    这里数据库接收到你的查询条件(价格区间和产品类别),然后从可能包含数千种产品的完整数据集中仅返回符合条件的结果。

    数据库的本质优势在于:

    1. 高效查询:无需遍历所有数据,通过索引快速定位符合条件的数据
    2. 数据一致性:确保数据符合预定义的规则和关系
    3. 并发处理:允许多个用户同时访问和修改数据
    4. 事务处理:保证复杂操作的完整性和一致性
    5. 数据安全:提供权限控制和数据加密

    数据库存储介质

    • 磁盘
    • 内存  

    MySQL的整体结构

    程序员并不需要去手动修改数据库的文件,而是将请求通过mysql交给mysqld,具体要怎么存储,格式是什么,任何细节我们都不需要去关心,由他帮助我们去数据库文件做! 

    主流数据库

    SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。

    Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑(银行),并发一般来说不如MySQL。

    MySQL世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。(生态比较好,主流数据库)

    PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

    SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设 计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可 能只需要几百K的内存就够了。

    H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

    MySQL的基本使用

    数据库的使用样例 

    这个数据库实际上就是一个目录,被保存在Linux下的 /var/lib/mysql (可在配置文件里修改) 

    创建数据库 

    create database hello;

    继续查看Linux下的MySQL文件, 我们会发现多了helloworld/的目录

    使用数据库  

    use helloworld;

    创建数据库表  

     create table student(-> id int,-> name varchar(32),-> gender varchar(2)-> );

    数据库文件里多了两个文件  student.ibd  student.frm 

    这里其实是有个 student.rfm 文件,但是因为我都mysql是高版本,移除了这个.rfm文件

    在MySQL 8.0及更高版本中,表的元数据存储方式发生了改变:

    1. 旧版本MySQL (5.7及以前) 使用以下文件格式:
      • .frm 文件:存储表结构/元数据
      • .MYD 文件:MyISAM表的数据文件
      • .MYI 文件:MyISAM表的索引文件
      • .ibd 文件:InnoDB表的数据和索引文件
    2. MySQL 8.0及更高版本
      • 移除了.frm文件
      • 表元数据现在存储在MySQL内部的数据字典中
      • 对于InnoDB引擎(默认引擎),只使用.ibd文件,其中包含表的数据、索引和元数据

    表中插入数据 

     insert into student(id,name,gender) values(1,'张三','男');

    查询表中数据

     select *from student;

    数据库的逻辑存储结构:

    使用mysql建立一个数据库,建立一张表结构,插入一些数据--对比一下mysql在Linux中是如何表现的

    • 建立数据库,本质上就是Linux下的一个目录
    • 在数据库内建立表,本质上就是在Linux下创建对应的文件即可!
    • 数据库本质其实也是文件!!只不过这些文件并不是由程序员直接操作,而是程序员通过mysql向数据库服务mysqld发送请求,然后由mysqld帮我们进行操作!!!

    服务器管理 

    若windows也安装了mysql 

    执行 win+r 输入 services.msc 打开服务管理器

    通过下图左侧停止,暂停,重启动按钮进行服务管理

    服务器数据库表之间的关系 

    所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库, 一般开发人员会针对每一个应用创建一个数据库

    MySQL的架构

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

    第一层:连接池:把链接做好管理,并且也要有权限认证(判断你是否是一个合法用户),还有一些安全方面的策略

    第二层(有点像编译器):对下达的mysql指令进行语法分析、词法分析,甚至还需要对查询的语句进行一定的优化。然后按照mysql的协议下达给下一层

    第三层(有点像驱动,负责和OS打交道):不同种类存储引擎(因为数据有不同的种类,有文本型的、二进制型的、大文件类型…… 针对不同种类的数据采用不同的存储方案,表现出来的效率是有区别的),对优化后的语句进行解释,然后交给下一层的文件系统完成相关的操作

    前三层都属于用户层!!站在网络的视角则是属于应用层!

     mysql其实也是个文件系统,只不过它是处于操作系统提供的文件之上的一套存储解决方案,

    MySQL语句分类 

    • DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create(创建表), drop(丢弃表), alter(修改表结构)
    • DML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert(插入),delete(删除),update(更新)    DML中又单独分了一个DQL,数据查询语言,代表指令: select(查询)
    • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant(赋权),revoke(取消权限),commit

    存储引擎

    存储引擎是:数据库管理系统如何存储数据,如何为存储的数据建立索引,如何更新、查询数据等技术的实现方法

    MySQL的核心就是插件式存储引擎,支持多种存储引擎。

    查看存储引擎

    show engines;

    存储引擎对比

    其实最常用的是innoDB和MyISAM 

    相关文章:

    MySQL基础 [一] - 数据库基础

    目录 什么是数据库 站在服务器角度理解 站在用户角度理解 为什么不直接使用文件存储呢? 主流数据库 MySQL的基本使用 数据库的使用样例 服务器管理 服务器数据库表之间的关系 MySQL的架构 MySQL语句分类 存储引擎 查看存储引擎 存储引擎对比 什么…...

    【华为OD技术面试真题 - 技术面】- Java面试题(17)

    华为OD面试真题精选 专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录 文章目录 华为OD面试真题精选虚拟机分区1. **虚拟磁盘分区**2. **虚拟机的内存分区**3. **CPU分配**4. **虚拟网络分区**5. **存储虚拟化和分区**6. **虚拟机分区管理**…...

    #Linux内存管理# 在32bit Linux中,内核空间的线性映射的虚拟地址和物理地址是如何换算的?

    在32位Linux系统中,内核空间的线性映射(也称为直接映射或低端内存映射)采用固定的偏移量进行虚拟地址和物理地址的换算。以下是详细的转换规则及背景知识: 1. 32位Linux内存布局 用户空间:虚拟地址 0x00000000 到 0x…...

    006贪心——算法备赛

    跨步问题 跳跃游戏|| 问题描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j &…...

    对 Python Websockets 库全方位详解

    一、WebSocket 简介 WebSocket 是一种基于 TCP 的协议&#xff0c;支持全双工通信&#xff08;服务器和客户端可以同时发送消息&#xff09;&#xff0c;适用于实时性要求高的场景&#xff08;如聊天、实时数据监控、在线游戏等&#xff09;。与 HTTP 不同&#xff0c;WebSock…...

    pytorch中Dropout

    Dropout 是一种常用的正则化技术&#xff0c;用于防止神经网络过拟合。PyTorch 提供了 nn.Dropout 层来实现这一功能。 基本用法 torch.nn.Dropout(p0.5, inplaceFalse) 参数说明&#xff1a; p (float): 每个元素被置为0的概率&#xff08;默认0.5&#xff09; inplace (b…...

    【玩泰山派】2、制作buildroot镜像,并烧录

    文章目录 前言制作buildroot镜像过程搭建环境&#xff08;docker版&#xff09;下载泰山派开发的sdk利用制作的镜像和下载的sdk去启动开发docker容器编译buildroot镜像 参考 前言 泰山派官方提供了不少现成的镜像 但是都买了泰山派了&#xff0c;肯定是想自己编译折腾下&…...

    初阶数据结构--树

    1. 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做 树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 有⼀个特殊的结点&#xff0c;称…...

    client-go如何监听自定义资源

    如何使用 client-go 监听自定义资源 在 Kubernetes 中使用 client-go 监听自定义资源&#xff08;Custom Resource&#xff0c;简称 CR&#xff09;需要借助 Dynamic Client 或 Custom Informer&#xff0c;因为 client-go 的标准 Clientset 只支持内置资源&#xff08;如 Pod…...

    安装gpu版本的dgl

    1.先去网址&#xff0c;找到对应版本的dgl,然后下载到本地。 dgl-whl下载地址 我的是python 3.8 &#xff0c;cuda 11.6. windows 2.在虚拟环境里 输入 pip install E:\dgl-1.0.2cu116-cp38-cp38-win_amd64.whl &#xff08;因为我下载到E盘里了&#xff09; 这样GPU版本的d…...

    AI比人脑更强,因为被植入思维模型【43】蝴蝶效应思维模型

    giszz的理解&#xff1a;蝴蝶效应我们都熟知&#xff0c;就是说一个微小的变化&#xff0c;能带动整个系统甚至系统的空间和时间的远端&#xff0c;产生巨大的链式反应。我学习后的启迪&#xff0c;简单的说&#xff0c;就是不要忽视任何微小的问题&#xff0c;更多时候&#x…...

    Libevent UDP开发指南

    UDP 与 TCP 的核心区别 无连接:不需要建立/维护连接 不可靠:不保证数据包顺序和到达 高效:头部开销小,没有连接管理负担 支持广播/多播:可以向多个目标同时发送数据 一、基础UDP服务器实现 1. 创建 UDP 套接字 #include <event2/event.h> #include <event2/lis…...

    Android View事件分发机制深度解析

    在Android面试中&#xff0c;关于View事件分发机制的考察往往不仅限于基础流程&#xff0c;更关注底层原理、性能优化和实际应用场景。以下是针对面试的全面回答策略&#xff1a; 一、基础回答框架 核心三要素&#xff1a; 传递流程 "事件分发遵循Activity → Window →…...

    如何在 GitHub 上开源一个小项目:从创建到长期维护的完整指南

    如何在 GitHub 上开源一个小项目&#xff1a;从创建到长期维护的完整指南 适用于 个人开发者、团队合作、企业开源&#xff0c;涵盖 Git 基础、GitHub 配置、最佳实践、社区互动、自动化 CI/CD 及长期维护策略。 &#x1f4cc; 1. 注册 GitHub 账户 如果你还没有 GitHub 账户&…...

    autoconf 笔记250404

    autoconf autoconf 是 Linux 系统中控制 IPv6 无状态地址自动配置&#xff08;SLAAC&#xff09; 的关键参数&#xff0c;位于 /proc/sys/net/ipv6/conf/<接口>/ 目录下。它决定接口是否根据接收到的 路由通告&#xff08;Router Advertisement, RA&#xff09; 自动生成…...

    5天速成ai agent智能体camel-ai之第1天:camel-ai安装和智能体交流消息讲解(附源码,零基础可学习运行)

    嗨&#xff0c;朋友们&#xff01;&#x1f44b; 是不是感觉AI浪潮铺天盖地&#xff0c;身边的人都在谈论AI Agent、大模型&#xff0c;而你看着那些密密麻麻的代码&#xff0c;感觉像在读天书&#xff1f;&#x1f92f; 别焦虑&#xff01;你不是一个人。很多人都想抓住AI的风…...

    FPGA——FPGA状态机实现流水灯

    一、引言 在FPGA开发中&#xff0c;状态机是一种重要的设计工具&#xff0c;用于处理具有时间顺序的事件。本文将详细介绍如何使用状态机实现一个LED流水灯的效果。 二、状态机概述 状态机&#xff08;FSM&#xff09;是一种行为模型&#xff0c;用于表示系统在不同状态下的…...

    晶晨S905-S905L-S905LB_S905M2通刷_安卓6.0.1_16S极速开机_线刷固件包

    晶晨S905-S905L-S905LB_S905M2通刷_安卓6.0.1_16S极速开机_线刷固件包 线刷方法&#xff1a;&#xff08;新手参考借鉴一下&#xff09; 刷机工具版本请用2.2.0以上&#xff0c;导入固件后&#xff0c;刷机工具右侧两个擦除打勾&#xff0c;然后点开始。插上刷机神器&#xf…...

    构建第一个ArkTS应用:Hello World之旅

    # 构建第一个ArkTS应用&#xff1a;Hello World之旅 在鸿蒙应用开发的领域中&#xff0c;ArkTS语言为我们提供了强大而便捷的开发方式。今天&#xff0c;就让我们一起踏上构建第一个ArkTS应用——Hello World的奇妙旅程。 ## 一、创建ArkTS工程 1. 首先&#xff0c;我们要使用…...

    第十五届单片机模拟考试III

    题目 题目不长 &#xff0c;功能也不难&#xff0c;一道水题 按键功能 S4界面切换&#xff0c;S5 功能切换&#xff0c;在不同界面转换不同的功能&#xff0c;定义两个标志位记录即可。 S9复位&#xff0c;回到初始状态&#xff0c;记得界面也得回到初始的信号界面&#xff0…...

    测试:正交法设计测试用例

    目录 一、什么是正交法 二、利用正交表设计测试用例 正交法设计测试用例的步骤 一、什么是正交法 正交法的目的是为了减少测试用例的数量&#xff0c;让尽可能少的用例覆盖两两组合。认识正交表。 最简单的正交表是L4(2^3)&#xff0c;含意如下&#xff1a; “L”代表正…...

    生成 SSH Key 并配置 GitHub/GitLab 详细教程

    &#x1f511; 生成 SSH Key 并配置 GitHub/GitLab 详细教程 &#x1f7e2; 第 1 步&#xff1a;检查是否已有 SSH Key 在 Git Bash (Windows)、终端 (Linux/macOS) 运行以下命令&#xff1a; ls -al ~/.ssh&#x1f539; 可能的输出&#xff1a; 如果已有 SSH Key&#xf…...

    [ctfshow web入门] web5

    前置知识 引用博客&#xff1a;phps的利用 当服务器配置了 .phps 文件类型时&#xff0c;访问 .phps 文件会以语法高亮的形式直接显示 PHP 源代码&#xff0c;而不是执行它。.phps被作为辅助开发者的一种功能&#xff0c;开发者可以通过网站上访问xxx.phps直接获取高亮源代码 …...

    Qt基本框架(2)

    本篇主要介绍如何设置窗口&#xff0c;以及在窗口中添加按钮 本文部分ppt、视频截图原链接&#xff1a;[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. Qt简单框架 2. 通过QMainWindow实现简单界面 QMainWindow是构建主窗口应用的核心类&#xff0c;通过合理设计…...

    基于javaweb的SpringBoot图片管理系统图片相册系统设计与实现(源码+文档+部署讲解)

    技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

    用HTML.CSS.JavaScript实现一个贪吃蛇小游戏

    目录 一、引言二、实现思路1. HTML 结构2. CSS 样式3. JavaScript 逻辑 三、代码实现四、效果展示 一、引言 贪吃蛇是一款经典的小游戏&#xff0c;曾经风靡一时。今天&#xff0c;我们将使用 HTML、CSS 和 JavaScript 来实现一个简单的贪吃蛇小游戏。通过这个项目&#xff0c…...

    [特殊字符] Pandas 常用操作对比:Python 运算符 vs Pandas 函数

    在 Pandas 中&#xff0c;许多操作可以直接使用 Python 的比较运算符&#xff08;如 、!、>、< 等&#xff09;&#xff0c;而不需要调用 Pandas 的专门函数&#xff08;如 eq()、ne()、gt() 等&#xff09;。这些运算符在 Pandas 中已经被重载&#xff0c;代码更简洁。以…...

    Java 实现插入排序:[通俗易懂的排序算法系列之三]

    引言 大家好!欢迎继续关注我的排序算法系列。今天,我们要学习的是另一种非常基础且重要的排序算法——插入排序 (Insertion Sort)。 插入排序的思路非常贴近我们日常整理扑克牌的方式,理解起来相对自然。虽然它在最坏情况下的效率不高,但在某些特定场景下,它的表现甚至优…...

    使用MATIO库写入MATLAB结构体(struct)数据的示例程序

    使用MATIO库写入MATLAB结构体(struct)数据的示例程序 MATIO是一个用于读写MATLAB数据文件(.mat)的开源C库。下面是一个完整的示例程序&#xff0c;展示如何使用MATIO库创建一个包含结构体数据的MAT文件。 示例程序 #include <stdio.h> #include <stdlib.h> #inc…...

    JVM——模型分析、回收机制

    方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存 虚拟机栈&#xff1a;虚拟机栈描述的是|ava方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局…...