MySQL基础概念知多少
MySQL基础概念相关的名词还是挺多的,比如3大范式、4种隔离界别、ACID、DQL、DML、DDL,还有redo、undo、binlog等,本文就统一整理下MySQL常见的基础概念,方便小伙伴们翻阅~
MySQL相关的名词概念还是挺多的,但是常用的也不多,因此将常用的统计整理下,便于回顾:
- DQL:data query language,指SELECT查询语句;
- DML:data manipulation language,指SELECT、UPDATE、INSERT、DELETE这4种对数据操控语句;
- DDL:data definition language,数据定义语句,创建/修改/删除表结构,主要有CREATE、ALTER、DROP等;
- MDL锁:Metadata Locking,这里的metalock指的是数据库及表的结构信息。MySQL中,DDL不属于事务范畴,如果事务和DDL并行执行,操作相关联的表的话,会出现各种意想不到问题,导致事务特性被破坏或者binlog顺序错乱等,为解决这些问题而引入MDL锁机制。
三大范式
- 第一范式:每个字段都是原子的,也就说不可再分解;
- 第二范式:有主键,非主键字段依赖主键字段;
- 第三范式:非主键之间不能相互依赖。
注意,三大范式是数据表的建议设计原则,并不是非得完全按照这个来设计,具体设计还要根据实际场景来分析。任何给定的数据通常有多种表示方法,完全的范式话和反范式化,以及二者的折中。在范式化数据库中,任何数据都会出现且只出现一次,相反在反范式化中,数据是冗余的。
ACID
ACID是事务的4个特性,分别是原子性、一致性、隔离性和持久性。
- A:atomicity,原子性,一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚;
- C:consistency,一致性,数据库总是从一个一致性的状态转换到另一个一致性的状态;
- I:isolation,隔离性,通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的(隔离级别在非提交读时不满足);
- D:一旦事务提交,则其所做的修改就会永久保存到数据库中。
隔离级别
数据库事务的4种隔离级别:
- 未提交读:一个事务可以读到另外一个事务未提交的数据。
- 提交度:一个事务更新数据过程中,如果事务还未提交,其他事务读不到该数据。
- 可重复读:该级别保证了在同一个事务中,多次读取同样记录的结果是一样的,解决了“提交读”中不可重复读的问题。但是理论上还是无法解决幻读问题(通过间隙锁可解决幻读问题)。
- 串行化:将所有事务都进行串行化处理,等级最高的隔离级别。
幻读问题
幻读就是当事务在读取某个范围数据时,另一个事务又在该范围插入了新的数据,当之前的事务再次读取该范围数据时,就会产生幻行。产生幻读的原因是之前的事务在读取数据的范围没有增加范围锁(range-locks),也就是读取时只是锁定的行级共享锁,没有锁定整个查询区间或者表。
常见索引结构
- B+树索引:B+ 树是关系型数据库中常见的索引类型。注意:B+树所以并不能找到一个给定键值的具体行,只能找到被查找数据行所在的页,然后数据库将页读入内存,在内存中进行查找,最后得到要查找的数据;
- 哈希索引:InnoDB支持的哈希索引是自适应的,不能人为干预在一张表中生成哈希索引,innodb会根据表的使用情况自动生成哈希索引;
- 全文索引:InnoDB支持全文索引,但是每张表只能有一个全文检索的索引,一般都是使用倒排索引技术来实现。
聚集索引和非聚集索引
聚集索引就是主键索引,其叶子节点就是记录的数据(页)。非聚集索引也叫做辅助索引,其叶子结点记录的是主键值。以表t为例说明如下:
create table T (
ID int primary key,
k int NOT NULL DEFAULT 0,
s varchar(16) NOT NULL DEFAULT '',
index k(k)) engine=InnoDB;
insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff');
表T对应的主键索引和辅助索引如下:
几个日志
- redo log:记录的是页的物理操作,InnoDB通过将事务操作先写redo log,而不是将数据页的更新写磁盘,相当于将磁盘随机写(data文件)变成了顺序写(redo log),后续在MySQL”空闲”时再慢慢写磁盘,提高服务器性能;
- undo log:undo log保存了事务发生之前的数据的版本,可用于回滚,同时可提供多版本并发控制读(MVCC),也就是非锁定读。undo log是逻辑日志,在执行undo时,仅仅是将数据逻辑上恢复至事务之前的状态,而不是从物理页上操作的,这一条不同于redo log。事务开始时将当前版本生成undo log,undo也会产生redo来保证undo log可靠性;
- binlog:binlog是mysql层面的归档日志,可用于主从复制和数据库基于时间点的还原。binlog记录的是逻辑日志,记录的是DDL和DML操作日志,可以简单认为是执行过的事务中的更新sql语句。
- 慢查询、错误日志等。
几个文件
- .ibd文件和.ibdata文件:.ibd文件和ibdata文件都是存放innodb数据的文件,之所有有2个,因为innodb支持配置来决定是使用共享表空间还是独享表空间。独享表空间使用”.ibd”文件存储数据,并且每个表有一个.ibd文件;如果使用共享表空间,则会使用ibdata文件,所有表公用一个(或者配置多个)ibdata文件。
- .ifm文件:存放表相关的元数据信息。
MySQL基础概念知多少的更多相关文章
- kubernetes基础概念知多少
kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用.高扩展性和可预测性的方式来管理容器应用的生命周期.通过k8s,用户可以定义程序运行方式.部署 ...
- python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令
前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...
- MySQL基础学习总结
1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...
- 数据库系统(五)---MySQL基础
一.SQL基本概念: SQL 已经成为关系数据库的标准语言,是一种数据库查询和程序设计语言,用 于存取数据以及查询.更新和管理关系数据库系统. 功能不仅仅是查询,还包括数据定义.数据操纵和数据控制等于 ...
- 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项
索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...
- MYSQL数据库基础概念
数据库的发展史 1.萌芽阶段:文件系统 使用磁盘文件来存储数据2.初级阶段:第一代数据库 出现了网状模型.层次模型的数据库3.中级阶段:第二代数据库 关系型数据库和结构化查询语言4.高级阶段:新一代数 ...
- 【Service】【Database】【MySQL】基础概念
1. 数据模型:层次模型.网状模型.关系模型 关系模型: 二维关系: 表:row, column 索引:index 视图:view 2. SQL接口:Structured Query Language ...
- 关系型数据库基础概念:MySQL系列之开篇
一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...
- mysql基础知识笔记
Mysql基础笔记 环境配置 基本概念 mysql命令行 进入 use show 查询 select order by where like 数据过滤regexp concat 文本函数 日期函数 数 ...
随机推荐
- [转载].NET Core 轻量级模板引擎 Mustachio
.NET Core 轻量级模板引擎 Mustachio 晓晨Master 一. 前言 Mustachio 是一款轻量级且强大的模板引擎,可以用在网页渲染.代码生成器等需要模板引擎的场景.我用它是用在配 ...
- SQLServer之列数据转换为行数据
UNPIVOT特点 UNPIVOT运算符通过将列旋转到行来执行PIVOT的反向操作,UNPIVOT 并不完全是 PIVOT 的逆操作. PIVOT 执行聚合,并将多个可能的行合并为输出中的一行.UNP ...
- asp.net core流式上传大文件
asp.net core流式上传大文件 首先需要明确一点就是使用流式上传和使用IFormFile在效率上没有太大的差异,IFormFile的缺点主要是客户端上传过来的文件首先会缓存在服务器内存中,任何 ...
- linux常用命令--开发调试篇
前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令. 示例程序 我们用一个小程序,来 ...
- javascript工厂函数(factory function)vs构造函数(constructor function)
如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个. ...
- tcp / udp 协议及其实现的socket
一.tcp协议 1.1 基本知识 特点: 可靠,慢,全双工通信 建立连接时:三次握手 断开连接时:四次挥手 在建立起连接之后 发送的每一条信息都有回执 为了保证数据的完整性,还有重传机制 长连接:会一 ...
- 写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么
怼一波,在项目中有很多经常用到,但又含糊不清的知识点 框架中的key: 1. 为啥在遍历元素时要用 key :在开发过程中为了保证遍历同级元素的唯一性,用来提高更新 dom 的性能: 2. 凭啥要保证 ...
- kali2.0升级
1.登录kali2.0系统 2 2.修改软件源APT-sources.list vim /etc/apt/sources.list 3 可以删除该文件中的所有内容,也可以直接在文前添加新的APT源. ...
- APS系统如何落地?用户实际痛点解析!
APS软件在中国的发展,在很长的时间内处于非常尴尬的状态:大企业都了解APS很重要,但只有非常少的企业肯真正实施APS软件,处于叫好不叫座的状态.直到工业4.0概念流行后,APS才逐渐被国内企业所认可 ...
- 配置DirectX SDK开发环境
创建工程 选择空工程 添加源文件 添加DirectX SDK测试程序 属性配置 添加头文件和库文件路径 D:\Microsoft DirectX SDK (February 2010)\Include ...