并发控制

读写锁

  • 读锁: 共享锁
  • 写锁: 排它锁

颗粒度

  • 表锁,MySQL中开销最小的锁
  • 行锁,MySQL中开销最大的锁

事务

ACID特性

  • 原子性(Automatic)
  • 隔离性(Isolation)
  • 一致性(Consistency)
  • 持久性(durability)

隔离级别

  • 隔离的等级共有四级,不同的隔离等级可以处理不同的问题,同时越高等级的隔壁级别会导致并发性越来越低,性能消耗越严重。

下面解释一下什么是脏读,不可重复读,幻读。

Dirty Read (脏读)

可以看到,当我读取后,原来的事务可能回滚,那么读到的就是脏数据了。

non-repeatable(不可重复读)

为了解决dirty read ,那就等你提交完我再读取咯。可是可以看到 x1 ,x2 读到的是不同的,出现了不可重复读。

phantom read(幻读)

幻读是不可重复读的特殊情况。指同一个事务内多次查询返回的结果集不一样(比如增加了或者减少了行记录)。比如同一个事务A内第一次查询时候有n条记录,但是第二次同等条件下查询却又n+1条记录,这就好像产生了幻觉。

资料阅读

可以阅读以下文章帮助理解隔离级别 :

  • 漫画
  • 隔离级别
  • stack_flow

总结隔离级别

  • read uncommited : 有可能会产生脏数据,很少使用.
  • read commited :  大多数数据库都是默认这种模式,但是 Mysql 不是, 又叫不可重复读(言外之意就是两次读的结果有可能不同),解决了脏数据问题,(当别人提交事务后对自己的事务有影响)
  • repeatable read :  MySQL 默认就是这种,就是每个操作都是独立的,不会影响,(对比上面一个模式就是即是实际值被修改了,两次读到却是一样的,都是原来的值).会出现幻行的情况,InnoDB使用间隙锁(next-key locking)策略防止幻读的出现.
  • seriaizable : 解决了并发问题,产生了性能问题.

死锁

事务一二都执行完第一条语句后,事务一发现自己需要的 stock= 4 的行纪录被事务二持有,而事务也一样,自己需要的 stock = 3 被事务1持有,就会产生死锁.InnoDB目前处理死锁的做法是,将持有最少行级排它锁的事务进行回滚(这是相对计较简单的死锁回滚算法).

事务日志

目的是提高工作效率.运行原理就是修改数据时只修改了内存拷贝,修改行为再纪录在事务日志中,而事务日志又是集中管理的,事务日志再一步步去更新磁盘数据.

MySQL 中的事务

MySQL提供了两种事务性的存储引擎: InnoDB 和 NDB Cluster

自动提交

MySQL默认采用自动提交(AutoCommit)模式,表示所有的操作都在一个事务中,只有Commit 提交或是Rollback 回滚,该事务才结束.

InnoDB采用的两阶段锁定协议,只有在执行Commit 或是Rollback 时才会释放.

在事务中混合使用存储引擎

如果在事务中使用了事务性和非事务性的表(例如InnoDB 和 MyISAMvia表).在正常提交的情况不会有什么问题,但是当该事务需要回滚的时候, 非事务的表会无法撤销修改.所以就会产生数据不一致的情况.

多版本并发控制(MVVC)

可以认为MVCC 是行级锁的一个变种,但是它在很多情况下避免了加锁操作.因此开销更低.

MVCC 的实现是通过保存数据在某个时间点的快照来实现的,InnoDB 是通过每行纪录后面保存的两个隐藏的列来实现的,这两个列纪录了行的创建时间,一个保存行的过期时间(或删除时间),(具体再去查文档了解)


存储引擎(简述)

InnoDB 存储引擎

  • 用来处理大量的短期事务
  • 基于聚簇索引建立的,聚簇索引对主键的检索很快
  • InnoDB的存储格式是平台独立的,即是说拷贝存储后可以在其他平台运行.
  • 内部做了很多优化,支持热备份.

MyISAM 存储引擎

在MySQL 5.1 以前 MyISAM (MSM) 是默认的存储引擎,包括很多特性 全文索引,压缩和空间函数,但MSM不支持行级锁和事务,缺点就是崩溃后无法正常恢复.对于只读的数据,或者表比较小,可以忍受修复操作,仍然可以使用MSM .

MSM 压缩表,如果表在创建并导入数据以后,不会在进行修改操作,那么这样的表或许适合MSM.压缩表不允许修改,可以极大地减少磁盘空间占用.也就可以减少磁盘IO.

转载于:https://www.cnblogs.com/Benjious/p/10435281.html

MySQL (一)(未完成)相关推荐

  1. mysql完成未完成_MYSQL SQL模式 (未完成)

    设置和查询SQL模式 通过修改sql_mode变量的值来改变SQL模式. SQL模式可以在全局级别下设置,也可以在会话级别下设置.在数据库启动时和数据库运行时都可以对sql_mode的值进行修改. 在 ...

  2. 机房断电、MySQL启动失败,InnoDB数据损坏如何恢复

    概要 [问题原因]服务器突然断电 [故障报告]数据库表结构损坏 [解决思路]进入强制恢复模式,库表及数据重建 故障发现 周末园区断电,周一启动数据库就直接报错了: ERROR! The server ...

  3. mysql 5.6.35anzhaung_MySQL安装与配置(5.6.12,参考乐沙弥博客,未完成)

    gcc/g++ : MySQL 5.6开始,需要使用g++进行编译.2 cmake : MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本.3 bison : MySQL ...

  4. mysql 递归_「MySQL」 - SQL Cheat Sheet - 未完成

    近几个月的心情真是安排的妥妥的,呈现W状.多的不说了,这里对SQL的测试进行简单梳理,制作一份SQL Cheat Sheet. 0x01.数据库基本架构 Clinet层 Server层 连接器 网络连 ...

  5. mysql事务处理用法与实例详解

    MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berkeley DB: ...

  6. mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)

    作者:派大新 链接:https://juejin.im/post/5f0d4fadf265da22f3250eaa 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小 ...

  7. MySQL建表枚举分区SQL,【mysql备份】02、Xtrabackup备份mysql

    一.Xtrabackup概述 1.Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb ...

  8. MySQL 5.5 服务器变量详解(二)

    innodb_adaptive_flushing={ON|OFF} 设定是否允许MySQL服务器根据工作负载动态调整刷写InnoDB buffer pool中的脏页的速率.动态调整刷写速率的目的在于避 ...

  9. MySQL Online DDL的改进与应用

    1 早期DDL实现原理(5.6.7之前 ) Innodb早期支持通过copy table跟inplace的方式来执行DDL语句,其原理如下: copy table方式 新建跟原表格一致的临时表,并在该 ...

最新文章

  1. Gson解析JSON数据中动态未知字段key的方法
  2. elasticsearch hbase
  3. python的分支结构
  4. 检测raid类型和磁盘坏道脚本
  5. 你知道怎么使用DebugView查看调试信息吗?
  6. P3545HUR-Warehouse StoreP4053建筑抢修(反悔贪心、堆)
  7. mysql数据库无法显示中文_mysql数据库不能显示中文是怎么回事呢?
  8. angulrar知识点整理
  9. 题目264-国王的魔镜
  10. mysql在windows配置多节点_Windows环境配置MySQL集群
  11. 版权符号©的输入方法
  12. win7 x64部署和串口调试虚拟驱动toaster
  13. 格雷码算法c语言实验报告,算法设计与分析实验报告
  14. frp客户端进行windows远程桌面连接
  15. 大一就开始参加电赛?看学长是咋学的!
  16. Wifi密码破解与局域网抓包监听(小白--纯工具版)
  17. 算法实践-遗传算法GA
  18. css一个点,用纯CSS从一个点到另一个点绘制一条线(路径)
  19. CO-PCA-利润中心会计
  20. 《Java黑皮书基础篇第10版》 第13章【笔记】

热门文章

  1. Chapter 2 Open Book——5
  2. cstring和string头文件
  3. 关于方法的重载和默认参数的一点小误区
  4. 远程连接SQL Server (转)
  5. linux下安装 Sublime Text 3
  6. axios的介绍与页面配置---axios工作笔记003
  7. k8s核心技术-Controller(Deployment)_概述和应用场景---K8S_Google工作笔记0028
  8. Netty工作笔记0065---WebSocket长连接开发4
  9. STM32工作笔记0009---认识FSMC和TTL电路
  10. 统计车牌识别里面各个lable 的数量