码迷,mamicode.com
首页 > 数据库 > 详细

MySQL事务和隔离级别

时间:2015-07-22 16:38:47      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:持久性   数据库   事务   

事务是什么

    一个大的处理单元,包含多项操作,涉及多次cpu和io操作,这些操作同时完成或同时不完成,即这个大的处理单元中的操作是一个整体,只有全部执行完毕,才进行提交。一般启动事务的是SQL语句,或是ODBC中专门启动事务的语句

事务的性质(应遵循的规则,ACID)

  • 原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不能停滞在中间某个环节,整个事务的所有操作是不可分割的,所以事务在执行过程中若发生错误,应回滚到事务开始前的状态,就像这个事务从来没有执行过一样

  • 一致性(Consistency):事务执行必定会引起数据库状态改变,一致性表示,事务开始到事务结束,数据库的整体状态是没有改变的

  • 隔离性(Isolation):事务并行执行时,确保每一事务在系统中认为只有该事务在使用系统,事务彼此间互不影响

  • 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改会持久的保存在数据库之中,通过写入日志文件当中

事务日志

    事务记录到事务日志文件中,最后再写入磁盘中(例如DELECT操作,有四个语句,四个语句执行都是在内存中完成,并且先记录到日志中,当整个操作完成,再从日志文件对数据文件进行修改)所以每个事务执行过程中都要写入两遍,一遍到日志,一遍到真实文件(日志记录的是操作过程,而非操作本身)

事务并发执行时需要进行并发控制,加锁是其中一种方式,也是一种重要的机制

锁分类

  • 读锁:共享锁(读的同时允许其他事务读)

  • 写锁:独占锁/排它锁(写的同时不允许其他事务读和写)

锁粒度:锁粒度从大到小,粒度越细越能实现并发性,但实现机制越复杂

(mysql server仅支持表级锁,行锁需要存储引擎完成)

  • 表锁

  • 行锁

隔离级别:由低到高,隔离级别越高,并发能力越低

  • READ UNCOMMITTED:读未提交:所有事务都可以看到其他事务操作结果,各种混乱

  • READ COMMITTED:读提交:事务在其他事务操作完提交后,才能看到其他事务的操作(我读了一次,再次读的时候已经被别人提交了,两次读的不一样)

  • REPATABLE READ:可重读:事务第一次读到什么,一直到提交的时候都是那样,即使其他事务在这个过程中对相同的内容操作并提交,也不会改变本事务读到的东西(提交后发现应该是10行现在变成了5行,可能别人在你没提交的时候修改并提交了)(mysql默认)

  • SERIALIZABLE:可串行,简单地说,事务不可同时执行






本文出自 “Call me Boxin” 博客,请务必保留此出处http://boxinknown.blog.51cto.com/10435935/1677013

MySQL事务和隔离级别

标签:持久性   数据库   事务   

原文地址:http://boxinknown.blog.51cto.com/10435935/1677013

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!