一、数据库的ACID

   原子性(Atomicity):保证事务中的所有操作全部执行或全部不执行。

   一致性(Consistency):保证数据库始终保持数据的一致性——事务操作之前和之后都是一致的。

   隔离性(Isolation):多个事务并发执行的话,结果应该与多个事务串行执行效果是一样的。

     持久性(Durability):事务操作完成之后,对数据库的影响是持久的,即使数据库因故障而受到破坏,数据库也能恢复(日志)。

二、事务隔离级别

事务隔离性:是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

    1、串行化(Serializable):所有事务一个接一个执行,这样可以避免幻读(phantom read),对于基于锁来实现的并发控制的数据库来说,串行化要求在执行范围查询的时候,需要获取范围锁,如果不是基于锁实现并发控制的数据库,则检查到有违反串行操作的事务时,需回滚该事务。  

    2、可重复读(repeated read):所有被select获取的数据都不能被修改,这样就可以避免一个事务前后读取不一致的情况。但是没有办法控制幻读,因为这个时候事务不能更改所选的数据,但是可以增加数据,因为强恶意事务没有范围锁。(事务a读取数据,事务b可以同样读取,不可以更改数据,但是可以增加数据)

    3、读已提交(read commit):被读取的数据可以被其他事务修改,这样可能导致不可重复读,也就是说,事务读取的时候,获取读锁,但是在读完之后立即释放(不需要等事务结束),而写锁则是事务提交之后才释放的,释放读锁之后就可能被其他事务修改数据。改等级也是sql server默认的隔离等级。(事务a读取数据,事务b不可以读取数据,事务b可以修改数据)

    4、读未提交(read uncommitted):最低的隔离等级,允许其他事物看到没有提交的数据,会导致脏读。

    总结:1、四个级别逐渐增强,每个级别解决一问题;

        2、事务级别越低,性能越差,大多数环境read committed就可以用了。

   

三、数据引擎

  在MySQL中,常用的数据引擎有MyISAM和InnoDB。两种类型最主要的差别是Innodb支持事务处理、外键和行级锁,而MyISAM不支持。所以MyISAM往往就容易被人们认为只适合在小项目中使用。

  这里说的行级锁是指最小粒度的锁,也支持表级锁;MyISAM支持表级锁,不支持事务、行级锁和外键。MyISAM强调的是性能,其执行性能比InnoDB要好,在少并发的环境下,查找、插入等要比InnoDB要好。

  建议在对事务有要求或高并发的情况下用InnoDB引擎,否则用MyISAM。

  

  两种引擎的具体差别:

 三、为什么MyISAM引擎要比InnoDB引擎要快?

四、InnoDB行锁实现方法

五、MyISAM和InnoDB引擎的区别应用场景:

  MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的select查询,那么MyISAM是更好的选择

  InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要自行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

最新文章

  1. 编译器开发系列--Ocelot语言1.抽象语法树
  2. AngularJS中bootstrap启动
  3. Hibernate的映射组件属性
  4. Ajax学习重点总结
  5. python转exe的小工具
  6. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet (转帖)
  7. 【转】扫盲 同步利器、分布式网盘--BT Sync
  8. 《C#本质论》读书笔记(14)支持标准查询操作符的集合接口
  9. Ubuntu,QT5连接MySQL
  10. 02---Net基础加强
  11. bookhub -- 扁平化本地电子书管理与分享工具
  12. android图片闪烁或帧动画
  13. Extjs中grid表头内容居中
  14. setInterval()与clearInterval()的用法
  15. 3.如何安装Apache Spark
  16. sql server 常用的查询语句
  17. 学习React系列(十)——Render Props
  18. javascript加RoR实现JSONP
  19. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂
  20. FFmpeg:视频转码、剪切、合并、播放速调整

热门文章

  1. Shiro:授权的相关实现
  2. Unity WWW类调用http
  3. Java 获取环境变量
  4. 阿里云server部署架构
  5. cocos2d-x3.2 下使用多线程
  6. Gym 100733J Summer Wars 题解:灵活运用扫描线的思想
  7. UVa 12716 GCD XOR (简单证明)
  8. Eclipse下载安装教程
  9. Django(part4)
  10. IP地址的正则表达式写法