新手入门Mysql--概念

1. 是什么?

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

1.1 RDBMS

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

1.数据以表格的形式出现

2.每行为各种记录名称

3.每列为记录名称所对应的数据域

4.许多的行和列组成一张表单

5.若干的表单组成database

1.2 MySQL数据库

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、 Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

2. 工作机制

2.1 整体架构图(C/S架构)

  • Client :

提供连接MySQL服务器功能的常用工具集

  • Server :

MySQL实例,真正提供数据存储和数据处理功能的MySQL服务器进程

  • mysqld:

MySQL服务器守护程序,在后台运行。它管理着客户端请求。mysqld是一个多线程的进程,允许多个会话连接,端口监听连接,管理MySQL实例

  • MySQL memory allocation:

MySQL的要求的内存空间是动态的,比如 innodb_buffer_pool_size (from 5.7.5), key_buffer_size。每个会话都有独一无二的执行计划,我们只能共享同一会话域内的数据集。

  • SESSION

为每个客户端连接分配一个会话,动态分配和回收。用于查询处理,每个会话同时具备一个缓冲区。每个会话是作为一个线程执行的

  • Parser

检测SQL语句语法,为每条SQL语句生成SQL_ID,用户认证也发生在这个阶段

  • Optimizer

创造一个有效率的执行计划(根据具体的存储引擎)。它将会重写查询语句。比如:InnoDB有共享缓冲区,所以,优化器会首先从预先缓存的数据中提取。使用 table statistics optimizer将会为SQL查询生成一个执行计划。用户权限检查也发生在这个阶段。

  • Metadata cache

缓存对象元信息和统计信息

  • Query cache

共享在内存中的完全一样的查询语句。如果完全相同的查询在缓存命中,MySQL服务器会直接从缓存中去检索结果。缓存是会话间共享的,所以为一个客户生成的结果集也能为另一个客户所用。查询缓存基于SQL_ID。将SELECT语句写入视图就是查询缓存最好的例子。

  • key cache

缓存表索引。MySQL keys是索引。如果索引数据量小,它将缓存索引结构和叶子节点(存储索引数据)。如果索引很大,它只会缓存索引结构,通常供MyISAM存储引擎使用

2.2 网络协议

2.2.1 通信协议

到MySQL5.7为止,总共有五种,分别是TCP/IP,TLS/SSL,Unix Sockets,Shared Memory,Named pipes,下面我们就来看看这五种的区别:

方式 默认开启 支持系统 只支持本机 如何开启 参数配置
TCP/IP 所有系统 –skip-networking=yes/no –port–bind-address
TLS/SSL 所有系统(基于TCP/IP)之上 –ssl=yes/no –ssl-* options
Unix Sockets 类Unix系统 –socket= 来关闭 –socket=socket path
Shared Memory Windows系统 –shared-memory=on/off. –shared-memory-base-name=
Named pipes Windows系统 –enable-named-pipe=on/off –socket=

2.2.2 报文格式

协议头:

每个协议头共4个字节

- 包数据长度:

前三个字节表示数据部分的长度(不包括协议头),三字节能表示的最大长度是16M-1(2^24 - 1),如果要发送的数据部分大于这个长度,要进行拆包,每16M-1个长度为一包。接收端在接受数据的时候,如果检测到包的长度是16M-1,说明后续还有数据部分,直到接收到<16M-1长度的数据包结束。这意味着最后一包的数据长度可能为0.

序号:

1个字节,从0开始递增。当发送一个新的sql、数据库重连,该值清0(函数sql/Net_serv.cc : net_clear).

数据类型:

除了固定长度的整型或者字符串之外,还有其他几种类型的数据。(固定长度字段数据的存取:include/Mybyte_order.h : 存值 intstore 取值:intkorr 多字节的处理按照小端优先的方式)

     1. 可变长度的整数
        对该类数据的存取在函数:sql-common/Pack.c: 存整数: net_store_length     读整数:net_field_length
        如果数值<251,直接用一个字节存储这个值。
       如果251<=数值<2^16, 采用3个字节存储,第一个字节是252, 另外2个字节存储整数内容
       如果2^16<=数值<2^24,采用4字节存储,第一个字节是252,另外3个字节存储整数内容
       如果2^24<=数值<2^64,采用9字节存储,第一个字节255,另外8字节存储整数内容
       如果第一个字节为251,表示该整数字段为null
       如果第一个字节为255,表示该字节是ERR包的第一个字节
   2. 可编码长度的字符串
           字符串的长度采用可变长度的整数进行编码。

2.3 SQL语法

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据UPDATE - 更新数据库表中的数据DELETE - 从数据库表中删除数据INSERT INTO - 向数据库表中插入数据SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库ALTER DATABASE - 修改数据库CREATE TABLE - 创建新表ALTER TABLE - 变更(改变)数据库表DROP TABLE - 删除表CREATE INDEX - 创建索引(搜索键)DROP INDEX - 删除索引

3. 小结

这篇文章从宏观和使用角度去了解Mysql是什么,后续深入。也请大家多多关注我们的更多内容

(0)

相关推荐

  • MySQL新手入门指南--快速参考

    一.SQL速成 以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册. 1.创建表 表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联.创建表的基本语法如下: create table table_name (column_name datatype {identity |null|not null}, -) 其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数dataty

  • 新手入门Mysql--sql执行过程

    目录 1. 流程 2. 核心架构 2.1 Server 层基本组件介绍 3. 语句分析 3.1 查询语句 3.2 更新语句 4. 总结 1. 流程 2. 核心架构 简单来说 MySQL 主要分为 Server 层和存储引擎层: Server 层:主要包括连接器.查询缓存.分析器.优化器.执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程.触发器.视图,函数等,还有一个通用的日志模块 binglog 日志模块. 存储引擎: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持 Inno

  • MySql新手入门的基本操作汇总

    库操作 查询 1.SHOW DATABASE; ----查询所有数据库 2.SHOW CREATE DATABASE 数据库名称; ----查询某个数据库的创建模式 3.SHOW CREATE DATABASE xxx; ----查询xxx数据库的创建模式 创建 1.CREATE DATABASE 数据库名称; ----创建数据库 注:不可以创建一个已经存在的数据库 2.CREATE DATABASE IS NOT EXISTS 数据库名称; ----判断数据库是否存在,不存在就创建 3.CRE

  • android studio 新手入门教程(二)项目的导入教程图解

    上篇文章介绍了AS的一些常用设置方法,当工具调教妥当后,自然就要开始项目的开发啦.从零开始新建一个项目,这个简单,不必多说,这篇博客会分享我从旧平台eclipse导入项目到AS的过程,以及遇到的一些问题并如何解决.开篇先粗略的提一些需要注意的地方. ##结构目录 和eclipse不同,在android 视图下的项目目录分为java,res和manifests. manifests目录存放清单文件,不必多说. java目录会默认生成三个文件夹,其中test为在本机执行单元测试代码的目录, andr

  • Java新手入门学习之正则表达式

    一.概述 1.概念:符合一定规则的表达式. 2.作用:用于专门操作字符串. 3.特点:用于一些特定的符号来表示一些代码操作,这样就可以简化代码书写. 4.好处:可简化对字符串的基本操作. 5.弊端:符号定义越多,正则越长,阅读性越差. 二.常用符号: 说明:X表示字符X或者匹配的规则. 一)字符 构造 匹配 \ 反斜线字符 \t 制表符 \n 回车符 \f 换页符 二)字符类 表达式 释义 [abc] a.b或c(简单类) [^abc] 任何字符,除了a.b或c(否定) [a-zA-Z] a到z

  • C语言文件操作零基础新手入门保姆级教程

    目录 一.前言 二.文件操作基础知识 ①什么是文件 ②数据文件类型 ③数据如何存储 ④如何读取二进制文件 ⑤什么是文件名 ⑥文件缓冲区 ⑦文件指针 三.文件操作函数 ①fopen 与 fclose ②fputc与fgetc ③fputs与fgets ④fprintf与fscanf ⑤fwrite与fread ⑥fseek与ftell与rewind ⑦ferror与feof ⑧补充函数 sscanf sprintf ⑨补充函数perror  strerror 总结 一.前言 我们如何使我们设计的程

  • Python+OpenCV人脸识别签到考勤系统实现(新手入门)

    前言 本项目为IOT实验室人员签到考勤设计,系统实现功能:1.人员人脸识别并完成签到/签退2.考勤时间计算3.保存考勤数据为CSV格式(Excel表格) PS:本系统2D人脸识别,节约了繁琐的人脸识别训练部分,简洁快捷 该项目为测试版,正式版会加入更多的功能,持续更新中…测试版项目地址我会放到结尾 项目效果图 系统初始化登陆界面 主界面展示图: 签到功能展示 签退功能展示 后台签到数据记录 是否签到/退判断 项目需要的环境 核心环境: OpenCV-Python 4.5.5.64 face_re

  • 干货 | Linux新手入门好书推荐

    前言 经常有读者问小编可否推荐一些 Linux 入门书籍,正好最近在知乎也看到类似的问题,如几个零碎的命令难以在 Linux 环境中存活,所以如果要真正形成自己的知识体系,还是要靠阅读专业书籍来积累. 众所周知Linux 对后端开发是必备技能,对 Python 开发者来说重要性不言而喻,将来你写的每一行代码,都有可能在 Linux 环境中运行.前端开发是否有必要学习 Linux 呢?这个就好比学驾照,学到了,总有一天会给你带来便利,暂时没时间学的可以先收藏着. linux之路,路漫漫其修远兮,吾

  • Android Studio 新手入门教程(一)基本设置图解

    ##写在前面: 作为一个刚半只脚踏入android开发的新手,在使用eclipse开发了两个自我感觉不甚成熟的商城类app之后,遇到了一些问题,总结为如下: 1.代码复用性 .findviewById,onclick事件等,一遍遍重复这类无聊的代码简直浪费生命,这个问题推荐通过依赖注入框架ButterKnife解决,直接一键生成布局中的所有控件,包括onclick点击事件,但是诸如行布局item里的控件,以及布局中include复用的布局要如何使用框架解决,这个有待后续再看. 另一个代码重复率很

  • android studio 新手入门教程(三)Github( ignore忽略规则)的使用教程图解

    Android Studio 里集成了上传代码到 github 的功能,所以使用上还是很简单的,设置里添加账号并测试,之后就可以很方便地上传代码到 github 了 如果你的项目是使用Android Studio新建的,那么关于 github 基本就没什么问题了.Android Studio新建项目是自带 .ignore 文件的,也就是说默认是使用了忽略规则上传.默认忽略的是 *.iml .gradle /local.properties /.idea/workspace.xml /.idea/

  • 全网最完整的Redis新手入门指导教程

    前言 本文提供全网最完整的Redis入门指导教程,下面我们从下载Redis安装包开始,一步一步的学习使用. 下载Redis 官网提供的Redis安装包是服务于Linux的,而我们需要在Window下使用Redis,所以,我们去下面这个网址中下载. Redis的下载地址:https://github.com/microsoftarchive/redis/releases. 如下图所示,Redis的windows版是由microsoftarchive提供,是微软的一个工作小组,所以我们可以选择完全信

  • Python爬虫新手入门之初学lxml库

    1.爬虫是什么 所谓爬虫,就是按照一定的规则,自动的从网络中抓取信息的程序或者脚本.万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的一个蜘蛛,不断的去抓取我们需要的信息. 2.爬虫三要素 抓取 分析 存储 3.爬虫的过程分析 当人类去访问一个网页时,是如何进行的? ①打开浏览器,输入要访问的网址,发起请求. ②等待服务器返回数据,通过浏览器加载网页. ③从网页中找到自己需要的数据(文本.图片.文件等等). ④保存自己需要的数据. 对于爬虫,也是类似的.它模仿人类请求网页的过程,但是又稍有不同.

随机推荐