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

导入与导出

创建与查询

 
 
 
 
 
 
 

最新文章

  1. NumPy 学习(3): 通用函数
  2. JavaScript 札记(数据类型和变量、)
  3. python 列表函数(转)
  4. 建立tracert路由列表的方法
  5. C语言初学 比较五个整数并输出最大值和最小值2
  6. jQuery Mobile 自定义按钮图标
  7. SwingBench---ORACLE压力测试工具
  8. Git提交到github上
  9. ADO.NET复习总结(2)--连接池
  10. Android 启动优化
  11. linux 如何截取一段时间内log日志
  12. python3: 爬虫---- urllib, beautifulsoup
  13. 基于MVC 的Quartz.Net组件实现的定时执行任务调度
  14. Vijos 1360 - 八数码问题 - [A*]
  15. C# semphore的使用
  16. 安装python的jupyter notebook工具
  17. C++委托模式
  18. Modelsim se仿真Xilinx IPcore
  19. BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明
  20. 2016.5.16——leetcode:Reverse Bits(超详细讲解)

热门文章

  1. Nginx基础 - HTTPS安全web服务
  2. printf,sprintf,fprintf的区别与联系
  3. Linux 驱动框架---驱动中的时间相关
  4. 基于vue3.0+electron新开窗口|Electron多开窗体|父子模态窗口
  5. CSS字体大小: em与px、pt、百分比之间的对比
  6. 如何在github中插入图片,链接,图片链接(给图片加上链接),文字+图片链接,的实战分享!
  7. 2020 Google 开发者大会
  8. HTML spaces types:   &   &  
  9. write a node cli tools, step by step
  10. how to fetch html content in js