MySql历史与架构

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

MySql历史与架构

茕祇   2021-03-13 我要评论

MySQL 逻辑架构

连接管理与安全性

每个客户端连接都会有一个线程
认证基于用户名,原始主机信息和密码

优化与执行

Mysql会解析查询并进行优化
对于select会先检查查询缓存,能够找到就直接返回结果集

并发控制

读写锁

锁在COMMIT或ROLLBACK时自动释放

读锁(共享锁)

共享,不阻塞,多个用户可以同时读同一个资源

写锁(独占锁)

保证只有一个用户写入,防止其他用户写入或读取数据

锁粒度

加锁,锁的检查,锁的解除都是要消耗系统资源的
加锁的对象大小成为锁粒度

锁策略

在锁的开销与数据的安全性中寻求平衡

行锁

最大程度支持并发,MySQL服务器层没有实现,由存储引擎实现

表锁

开销最小
MySQL服务器可以根据自己的目的加上表锁而忽略存储引擎的锁机制

事务

一组原子性的SQL语句,要么全部执行,要么全部不执行
ACID
  1. 原子性: 要么全部执行,要么全部不执行
  2. 一致性: 状态的改变是完全的,不存在改变一半就被保存的情况
  3. 隔离性: 在提交前对其他事务不可见
  4. 持久性: 数据更改会永远保存

隔离级别

未提交读(Read Uncommited)

即使事务未曾提交,数据对于其他事务也是可见的.即事务可以读取未提交的数据,也叫脏读或读脏数据

可提交读

即一个事务在提交之前,改变对其他事务是不可见的,又叫不可重复读,幻读(在一个事务读取数据后还未提交时,另一个事务更改了数据)

可重复读

解决了幻读和脏读的问题

可串行化

强制事务串行执行,给每一行数据加锁

死锁

死锁指两个或多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而造成的恶性循环
死锁发生后,只能通过部分或完全回滚事务才能解决
例子

事务日志

好处

  1. 避免频繁从内存向磁盘中写入数据(可以记录下日志操作,在后台慢慢一次写入,所以日志文件是追加写)
  2. 便于出现故障后的恢复

Mysql中的事务

自动提交(AUTOCOMMIT)

混合使用多种存储引擎

InnoDB: 支持事务
MyISAM: 不支持事务
不支持事务的表回滚不能撤销更改

隐式和显式锁定

显式: 自动加锁
隐式: 主动加锁

多版本并发控制(MVCC)

  • 一个列保存了创建时间,一个列保存删除时间(时间指版本号)
  • 每开始一个新的事务,系统版本号都会递增,并把事务开始时的版本号作为事务的版本号,供与查询到的每行版本号相匹配

MySql存储引擎

  • 表的定义存储在.frm文件中
  • 通过show table status 'tableName'查看表的相关定义信息

InnoDB

是MySql的默认事务型引擎,也是使用最广泛的存储引擎,被设计用来处理大量短期事务
  • 数据存储在表空间中
  • 采用MVCC实现并发,实现四种隔离级别,默认可重复读
  • 基于聚簇索引(第二索引必须包含主键)建立

MyISAM

缺点

  1. 不支持事务和行级锁
  2. 数据库崩溃后无法安全恢复

特性

  1. 对整张表加锁,而不是针对行,但在读取数据的时候依然可以插入新的数据(并发插入)
  2. 延迟更新索引键

其他引擎

CSV

用于转化.csv文件成数据库里的表

Memory

Archive

第三方引擎

选择合适的引擎

除非用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎
最好不要混用多种存储引擎!!!

更换表的引擎

ALTER TABLE

ALTER Table name Engine = InnoDB

导入与导出

创建与查询

 
 
 
 
 
 
 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们