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文件:存放表相关的元数据信息。

原文地址:https://mp.weixin.qq.com/s?__biz=MzIwNTI2ODY5OA==&mid=2649938420&idx=1&sn=dfc0bedd7f0e59b41511bfe492f5d45c&chksm=8f350a41b84283577e87cf4fde1470babcb837a5352f21fb422959129d211bd0eaf21f29f795&token=1297190316&lang=zh_CN#rd

MySQL基础概念知多少的更多相关文章

  1. kubernetes基础概念知多少

    kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用.高扩展性和可预测性的方式来管理容器应用的生命周期.通过k8s,用户可以定义程序运行方式.部署 ...

  2. python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令

    前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...

  3. MySQL基础学习总结

    1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...

  4. 数据库系统(五)---MySQL基础

    一.SQL基本概念: SQL 已经成为关系数据库的标准语言,是一种数据库查询和程序设计语言,用 于存取数据以及查询.更新和管理关系数据库系统. 功能不仅仅是查询,还包括数据定义.数据操纵和数据控制等于 ...

  5. 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项

    索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...

  6. MYSQL数据库基础概念

    数据库的发展史 1.萌芽阶段:文件系统 使用磁盘文件来存储数据2.初级阶段:第一代数据库 出现了网状模型.层次模型的数据库3.中级阶段:第二代数据库 关系型数据库和结构化查询语言4.高级阶段:新一代数 ...

  7. 【Service】【Database】【MySQL】基础概念

    1. 数据模型:层次模型.网状模型.关系模型 关系模型: 二维关系: 表:row, column 索引:index 视图:view 2. SQL接口:Structured Query Language ...

  8. 关系型数据库基础概念:MySQL系列之开篇

    一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...

  9. mysql基础知识笔记

    Mysql基础笔记 环境配置 基本概念 mysql命令行 进入 use show 查询 select order by where like 数据过滤regexp concat 文本函数 日期函数 数 ...

随机推荐

  1. spring-session(二)与spring-boot整合实战

    前两篇介绍了spring-session的原理,这篇在理论的基础上再实战. spring-boot整合spring-session的自动配置可谓是开箱即用,极其简洁和方便.这篇文章即介绍spring- ...

  2. 理解 Virtual DOM(摘)及评价

    框架并没有提高web的性能,只是让开发者更加专注的完成业务逻辑,而不用过渡的考虑性能上的优化.如果以性能来比的话,框架是绝对比不过优化后的原生代码的. 二.什么是Virtual DOM Virtual ...

  3. 2019-11-29-C#-直接创建多个类和使用反射创建类的性能

    原文:2019-11-29-C#-直接创建多个类和使用反射创建类的性能 title author date CreateTime categories C# 直接创建多个类和使用反射创建类的性能 li ...

  4. ADO.NET中使用事务

    using (SqlConnection conn = new SqlConnection(k2ConnStr)) { SqlCommand cmd = new SqlCommand(sql, con ...

  5. js数组去重 数组拼接 替换数组中的指定值 递归数组 判断数组中是否存在指定值 数组求和 根据条件判数组值

    这是学习过程中记录的一些关于数组操作的常用属性或方法,记录一下方便以后使用. // 数组去重 var arr1 = [1,1,2,3,4,5,6,3,2,4,5,'a','b','c','a',6,7 ...

  6. javascript 对象的创建与继承模式

    针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内.写这个主要是当个笔记加总结 存在的问题请大家多多指正! 6.1理解对象 创建对象的两个方法(暂时) //第一种,通过创建一个Object ...

  7. Jenkins 显示语言-英文切换中文

    1.进入插件管理 搜索 Locale 插件并进行安装 2.插件安装成功后进入系统设置 3.在 Locale 中 Default Language 字段填入 zh_CN 并且勾选 Ignore brow ...

  8. ./configure & make & make install 知其所以然

    最近一直在类unix系统上(Ubuntu和Mac OS)上调研第三方的一些开源库,要涉及到开源库的编译安装工作,接触最多的就是./configure & make & make ins ...

  9. 大规模定制模式之于MES的三点思考

    大规模定制(Mass Custermization) ,其目标是大规模生产定制化产品,并且在效率.质量(一致性)等指标方面与大规模批量生产等齐. 这是一种理想或者追求,其提出的背景是目前越发普遍的多品 ...

  10. IIS 6.0 cmd iisapp -a C:\WINDOWS\system32\iisapp.vbs不存在

    心血来潮看下iis cmd>iisapp -a "噔" 弹出 windows脚本宿主错误:无法找到脚本文件 C:\WINDOWS\system32\iisapp.vbs 晕 ...