MySQL逻辑架构:

链接管理与安全性:

MySQL5.5或更高版本版本提供了一个API,支持线程池(Thread-Pooling)插件,可以使用池中的少量线程来服务大量的连接。

优化与并行:

MySQL会解析查询,并创建解析树,然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。

并发控制:

1.读写锁:

读锁为共享锁,相互不阻塞。写锁为排他锁,持有写锁会阻塞其他读写操作。

2.锁粒度:

表锁:写操作(增删改)会锁住整张表。

行级锁:写操作仅锁住修改的行。

事务:

事务就是一组原子性的SQL操作。

START TRANSACTION;

......

COMMIT;

特性:ACID(原子性、一致性、隔离性、持久性)。

隔离级别:

事务之间的相互可见程度。

READ UNCOMMITTED  脏读、不可重复读、幻读

READ COMMITTED  不可重复读、幻读

REPEATABLE READ  幻读

SERIALIZABLE  加锁读

假设有连个并发的事务A、B

1.A事务修改某行未提交,B事务查询,则脏读。

2.A事务修改某行提交,B事务在A事务前与提交后均查询,两次结果不同,即不可重复读。

3.A事务新增某行提交,B事务在A事务提交前范围查询,提交后又范围查询,多查出新增行,即幻读。

4.所有事务串行执行,加锁读。

死锁:

事务1

START TRANSACTION;

update stockPrice set close = 45.50 where stock_id=4 and date = '2002-05-01';

update stockPrice set close = 19.80 where stock_id=3 and date = '2002-05-02';

COMMIT;

事务2

START TRANSACTION;

update stockPrice set high= 20.12 where stock_id=3 and date = '2002-05-02';

update stockPrice set high = 47.20 where stock_id=4 and date = '2002-05-01';

COMMIT;

凑巧两条事务都执行了第一行,持有了对方的锁。要执行第二行的时候需要对方释放锁,会造成死锁。

InnoDB存储引擎会检查死锁的循环依赖并返回一个错误,处理方式是将持有最少行级排他锁的事务回滚。

InnoDB存储引擎:

1.支持事务。

2.自动崩溃恢复。

MyISAM存储引擎:

1.不支持事务。

2.不支持自动崩溃恢复

3.可以压缩表(只读),压缩表可以极大减少磁盘空间

最新文章

  1. yii 验证问题
  2. jQqery EasyUI dategrid行中多列数据的可编辑操作
  3. Hibernate的三种状态
  4. 记忆用户设置-提升程序的体验VB/C#
  5. JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target
  6. 使用js使某个按钮在5秒内不能重复点击
  7. 143. Reorder List
  8. 转--2014年最新810多套android源码2.46GB免费一次性打包下载
  9. edX开发部署开篇
  10. 让PHP程序永远在后台运行
  11. 初步swift语言学习笔记8(保留了很多OC实现)
  12. WeMall微信商城源码插件大转盘代码详情
  13. 浅入深出之Java集合框架(下)
  14. Spring 为Bean对象执行初始化和销毁方法
  15. HttpURLConnection 411错误解决
  16. 使用Flask-SQLAlchemy管理数据库
  17. maven下载及安装最详解
  18. Arrays工具、二维数组以及LeetCode练习题
  19. js 格式化带时区的日期
  20. Python爬取淘宝店铺和评论

热门文章

  1. VS2005 编译 Qt4.8.2库,并修正源码中的错误
  2. C#中的String.Format介绍
  3. 新浪微博Python客户端接口OAuth2
  4. matlab 工具函数 —— axnote(在坐标轴上写文本内容)
  5. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller
  6. VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP
  7. html 自制属性
  8. MYSQL 定时自动执行EVENT
  9. 一个让业务开发效率提高10倍的golang库
  10. Resolve conflict using "MERGE_HEAD (origin/HEAD)"