【MySQL篇】第一篇——数据库基础

news2024/10/6 6:40:39

目录

什么是数据库

主流数据库

基本使用

MySQL安装

连接服务器

服务器管理

服务器,数据库,表关系

使用案例

创建数据库

使用数据库

创建数据库表

表中插入数据 

查询表中的数据

数据逻辑存储

MySQL架构原理

MySQL整体逻辑架构

MySQL逻辑模块组成

SQL分类

存储引擎

存储引擎

查看存储引擎

存储引擎对比


什么是数据库

数据库(Database)是按照数据结构来组织,存储和管理数据的仓库,安装在操作系统之上。

例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。

有了这个"数据仓库"就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那的人事管理就可以达到极高的水平。

存储数据用文件就行了,为什么还要搞数据库?

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

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

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西--数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中

关系型数据库:

  • MySQL、Oracle、Sql Server、DB2、SQLlite
  • 通过表和表之间,行和列之间的关系进行数据的存储
  • 通过外键关联来建立表与表之间的关系

非关系型数据库

  • Redis、MongoDB
  • 指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

基本使用

MySQL安装

前面一章我有讲解centos7 安装与卸载 感兴趣的伙伴可以去看一下:(30条消息) centos7 安装与卸载 Mysql 5.7.27(详细完整教程)

  • Centos 6.5下编译安装MySQL 5.6.14
  • CentOS 7 通过 yum 安装 MariaDB
  • Windows下安装MySQL5.7

连接服务器

输入:

mysql -h 127.0.0.1 -P 3306 -u root -p

输出:

注意:

如果没有写-h 127.0.0.1默认是连接本地

如果没有写-P 3306默认是连接3306端口号

服务器管理

  • 执行 win+r 输入 services.msc 打开服务管理器
  • 通过下图左侧停止,暂停,重启动按钮进行服务管理

服务器,数据库,表关系

  • 所谓安装数据库服务器,只是机器安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器,数据库和表的关系如图所示:

下面我们来查看mysql的配置:

输入:

vim /etc/my.cnf

输出:【mysql】下面是客户端配置,【mysqld】下面是服务端配置。

这里挑几个重要的来讲:

datadir=/var/lib/mysql

数据库中的表+表全部都会在该路径下! 

进入到root来查看该路径下到底有什么。

使用案例

创建数据库

输入:

create database helloworld;

输出:

下面我们通过指令来查看是否创建成功:

show databases;

出于好奇心,cd下查看这个数据库中有什么:

下面会进行详解。

所谓的创建数据库,就是创建目录。

使用数据库

输入:

use 1122_db;

输出: 

创建数据库表

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

 查看一下表:

show tables;

 输出:

所谓的创建数据库表,本质就是在特定目录下创建特定的文件.

查看表的结构:

desc student;

表中插入数据 

输入 

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

 输出

查询表中的数据

输入:

select* from hello;

输出: 

数据逻辑存储

所谓的数据逻辑存储其实就是这样的一张表。

MySQL架构原理

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

 MySQL是一个典型的C/S架构程序,MYSQL Server提供数据库服务,完成客户端的请求和操作,Client负责连接到Server.MySQL和其他关系型数据库不一样的地方在于它的弹性以及可以通过插件形式提供不同种类的存储引擎,MySQL请求处理过程会根据不同的存储引擎发生变化,比如事务性的InnoDB和非事务性的MyISAM,数据的存储和SQL的执行会产生很大的差异。本文简单的介绍MySQL的逻辑和物理架构。

MySQL整体逻辑架构

我们先看下图MySQL整体逻辑架构

第一层:连接层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。

第二层:核心服务层 。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。
第三层:存储引擎层。通常叫做StorEngine Layer ,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事 物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。
第四层:数据存储层。主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

MySQL逻辑模块组成

虽然从上图看起来 MySQL 架构非常的简单,就是简单的两部分而已,但实际上每一层 中都含有各自的很多小模块,尤其是第二层 SQL Layer ,结构相当复杂的。下面我们就分别 针对 SQL Layer 和 Storage Engine Layer 做一个简单的分析。我们看下图体系结构:

  • Connectors:指的是不同语言中与SQL的交互,如php、java等。
  • Management Serveices & Utilities: 系统管理和控制工具

  • Connection Pool:管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。

  • SQL Interface:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

  • Parser: 解析器:SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。
    主要功能:
    a . 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
    b.  如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

  • Optimizer: 查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句) ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果。

     他使用的是“选取-投影-联接”策略进行查询

      用一个例子就可以理解: select uid,name from user where gender = 1;

     这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过 滤这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤将这两个查询条件联接起来生成最终查询结果

  • Cache和Buffer: 查询缓存:  Cache:主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。

      buffer与cache的区别?
       缓存那里实际上有buffer和cache两个,那它们之间是否有什么不同呢?简单的说就是,buffer是写缓存,cache是读缓存。

  • 存储引擎接口:储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。还可以看出,MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。
     注意:存储引擎是基于表的,而不是数据库

MySQL 整个查询执行过程,总的来说分为 6 个步骤 :

SQL执行步骤:请求、缓存、SQL解析、优化SQL查询、调用引擎执行,返回结果
    1、连接:客户端向 MySQL 服务器发送一条查询请求,与connectors交互:连接池认证相关处理。
    2、缓存:服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段
    3、解析:服务器进行SQL解析(词法语法)、预处理。
    4、优化:再由优化器生成对应的执行计划。
    5、执行:MySQL 根据执行计划,调用存储引擎的 API来执行查询。
    6、结果:将结果返回给客户端,同时缓存查询结果。

SQL分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构
    代表指令: create, drop, alter
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作
    代表指令: insert,delete,update
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
    代表指令: grant,revoke,commit

存储引擎

存储引擎

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

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

Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用相应引擎,或者编写存储引擎。

  MySQL5.0支持的存储引擎包含 : InnoDB 、MyISAM 、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎是非事务安全表。

查看存储引擎

输入:

show engines;

输出: 

查看mysql数据库默认的存储引擎,输入:

show variables like '%storage_engine%' ;

 输出:

 InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。(后面详细讲解)

存储引擎对比

特点InnoDBMyISAMMEMORYMERGENDB
存储限制64TB没有
事务安全支持
锁机制行锁(适合高并发)表锁表锁表锁行锁
B树索引支持支持支持支持支持
哈希索引支持
全文索引支持(5.6版本之后)支持
集群索引支持
数据索引支持支持支持
索引缓存支持支持支持支持支持
数据可压缩支持
空间使用N/A
内存使用中等
批量插入速度
支持外键支持

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。以下是几种常用的存储引擎的使用环境。

  • InnoDB : 是Mysql的默认存储引擎,用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询意外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。InnoDB存储引擎除了有效的降低由于删除和更新导致的锁定, 还可以确保事务的完整提交和回滚,对于类似于计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB是最合适的选择。
  • MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的
  • MEMORY:将所有数据保存在RAM中,在需要快速定位记录和其他类似数据环境下,可以提供几块的访问。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的。MEMORY表通常用于更新不太频繁的小表,用以快速得到访问结果。
  • MERGE:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用他们。MERGE表的优点在于可以突破对单个MyISAM表的大小限制,并且通过将不同的表分布在多个磁盘上,可以有效的改善MERGE表的访问效率。这对于存储诸如数据仓储等VLDB环境十分合适。

这里做简单了解,后面会详细讲解

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

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

相关文章

Eureka架构篇 - 服务发现

前言 从客户端与服务端两个角度概述一下Eureka服务发现的原理,如下: 客户端 依赖自动装配机制,客户端启动时就会从Eureka服务端全量获取服务实例的注册信息并缓存到本地。之后每隔30秒向Eureka服务端发起增量获取的请求,如果增…

云原生周刊 | 波音公司允许员工给开源项目做贡献

如果你要问谁对开源项目的贡献最小,那一定是保密等级很高的国防工业机构,但这个魔咒最近被波音公司给打破了。在最近的一次 Linux 基金会成员峰会 keynote 演讲中,波音公司提到他们会在 2022 年成立一个开源办公室,并且从即日起&a…

m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 经度纬度和高度来自GPS信号的中的GPGGA的数据。所以提取这三个信息主要是对GPGGA中的数据进行整理。GPGGA的数据格式如下所示: GPGGA是GPS数据输出格式语句,意思是…

9问502

一、502意味着什么 502 Bad Gateway是指错误网关,无效网关;在互联网中表示一种网络错误。表现在WEB浏览器中给出的页面反馈。它通常并不意味着上游服务器已关闭(无响应网关/代理) ,而是上游服务器和网关/代理使用不一…

latex 模板使用技巧——参考文献篇

参考文献说明: 一、 常用参考文献类型 1、会议 (INPROCEEDINGS) 示例: INPROCEEDINGS{rcnn,title{Rich feature hierarchies for accurate object detection and semantic segmentation},author{Girshick, Ross and Donahue, J…

骨传导耳机是利用什么原理听歌?什么骨传导耳机好用

这几年来骨传导耳机的火热程度不言而喻,很多运动人士手上必有一款骨传导耳机,也随着骨传导耳机的兴起,越来越多小伙伴都加入了运动当中。当然,也有很多小伙伴是不知道骨传导耳机的,更不知道骨传导耳机有什么作用&#…

KESION(.NET版)安装方法

若是windows2008系统,访问xxxxxx.com - xxx sex videos free hd porn 资源和信息。 安装界面没有样式加载,请先编辑web.config 去掉 <defaultDocument> <files> <clear /> <add value"index.aspx" /> </files> </defaultDocume…

Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)

需要源码和图片集请点赞关注收藏后评论区留言~~~ 一、PDF文件渲染器 Android集成了PDF的渲染操作&#xff0c;从很大程度上方便了开发者&#xff0c;这个PDF文件渲染器便是PdfRenderer。渲染器允许从存储卡读取PDF文件 打开PDF文件只是第一步&#xff0c;接下来使用PdfRender…

Java FreeMarker模板引擎注入深入分析

0x01 前言 最近和 F1or 大师傅一起挖洞的时候发现一处某 CMS SSTI 的 0day&#xff0c;之前自己在复现 jpress 的一些漏洞的时候也发现了 SSTI 这个洞杀伤力之大。今天来好好系统学习一手。 有三个最重要的模板&#xff0c;其实模板引擎本质上的原理差不多&#xff0c;因为在…

CPT-MNPS/Fe3O4 NPs/Au NPs顺铂偶联磁性纳米粒子/四氧化三铁纳米粒子/金纳米粒子

小编下面整理了CPT-MNPS/Fe3O4 NPs/Au NPs顺铂偶联磁性纳米粒子/四氧化三铁纳米粒子/金纳米粒子&#xff0c;来看&#xff01; CPT-偶联纳米粒子 采用新工艺制备了包载盐酸阿霉素的明胶-泊洛沙姆纳米脂质体&#xff0c;并进行相关性能的表征。采用WW型明胶-泊洛沙姆乳液体系结合…

131. 分割回文串-思路整理

题目 给你一个字符串s&#xff0c;请你将 s分割成一些子串&#xff0c;使每个子串都是回文串。返回 s 所有可能的分割方案。 回文串: 是正着读和反着读都一样的字符串。 输入&#xff1a;s "aab" 输出&#xff1a;[["a","a","b"]…

Advances in Graph Neural Networks笔记4:Heterogeneous Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 本书网址&#xff1a;https://link.springer.com/book/10.1007/978-3-031-16174-2 本文是本书第四章的学习笔记。 感觉这一章写得不怎么样。以研究生组会讲异质图神经网络主题论文作为标准的话&#xff0c;倒是还行&#xff0c;介绍了HGNN的常见…

【面试宝典】吐血整理的100道Java多线程并发面试题

吐血整理的108道Java多线程&并发面试题前言1、Java中实现多线程有几种方法2、继承 Thread 类 流程3、实现 Runnable 接口4、ExecutorService、 Callable、 Future 有返回值线程5、基于线程池的方式6、4 种线程池7、如何停止一个正在运行的线程8、notify()和notifyAll()有什…

Clean-label Backdoor Attack against Deep Hashing based Retrieval论文笔记

论文名称Clean-label Backdoor Attack against Deep Hashing based Retrieval作者Kuofeng Gao &#xff08;Tsinghua University&#xff09;出版社arxiv 2021pdf在线pdf代码无 简介&#xff1a;本文提出了首个针对 hashing 模型的 clean-label backdoor attack。生成 targeted…

图像传统处理算法-边缘检测-分割-增强-降噪

一、边缘检测 边缘检测的几种微分算子&#xff1a; 一阶微分算子&#xff1a;Roberts、Sobel、Prewitt 二阶微分算子&#xff1a;Laplacian、Log/Marr 非微分算子&#xff1a;Canny 一阶微分算子 1.Roberts: 没有经过图像平滑处理&#xff0c;图像噪声无法得到较好的抑制…

Proactive Privacy-preserving Learning for Retrieval 论文笔记

论文名称Proactive Privacy-preserving Learning for Retrieval作者Peng-Fei Zhang (University of Queensland)会议/出版社AAAI 2021pdf&#x1f4c4;在线pdf代码无代码概要&#xff1a; 本文提出了一种针对检索系统隐私保护的方法&#xff0c;称为 PPL。训练一个生成器&#…

SPARKSQL3.0-Optimizer阶段源码剖析

一、前言 阅读本节需要先掌握【SPARKSQL3.0-Analyzer阶段源码剖析】 Optimizer阶段是对Analyzer分析阶段的逻辑计划【logicalPlan】做进一步的优化&#xff0c;将应用各种优化规则对一些低效的逻辑计划进行转换 例如将原本用户不合理的sql进行优化&#xff0c;如谓词下推&am…

PCB设计仿真之探讨源端串联端接

作者&#xff1a;一博科技高速先生成员 孙宜文 上期高速线生简单介绍了反射原理也提到了源端串联端接&#xff0c;笔者借此篇文章再深入探讨下&#xff0c;本文使用Sigrity Topology Explorer 17.4仿真软件。 搭建一个简单的电路模型&#xff0c;给一个上升沿和下降沿均为0.5…

学会使用这些电脑技巧,可以让你在工作中受益无穷

技巧一&#xff1a;设置计算机定时关机 第一步&#xff1a;快捷键win r打开运行窗口。 第二步&#xff1a;输入&#xff1a;shutdown -s -t 3600&#xff0c;其中数字3600表示3600秒&#xff0c;就是设置3600秒后关机。第三步&#xff1a;按确定完成设置。如果你想取消设置&…

吃透这份高并发/调优/分布式等350道面试宝典,已涨30k

前言 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试必备系列文章的初衷。 整理自己学过的知识&#xff0c;总结&#xff0c;让其成为一套体系&#xff0c;方便日后查阅。现在不少 Java …