网站地图    收藏   

主页 > 后端 > mysql数据库 >

对数据库事务的总结 - mysql数据库栏目 - 自学ph

来源:自学PHP网    时间:2015-04-16 10:51 作者: 阅读:

[导读] 对数据库事务的总结1 什么是事务?事务是逻辑上的一组操作,而组成这一组操作的是各个单位,要么全部执行成功,要么全部执行失败。示例:银行转帐,要么转帐成功,要么失败。不...

数据库事务的总结
 
1.什么是事务?
 事务是逻辑上的一组操作,而组成这一组操作的是各个单位,要么全部执行成功,要么全部执行失败。
 
示例:银行转帐,要么转帐成功,要么失败。不可以出现A帐户的钱少了,B帐户上的钱没有增加。
 
2.事务的四大特性(ACID)面试常考
a.原子性(Atomicity)
 事务是指一组不可分割的单位,事务中的操作要么全部执行成功,要么全部失败
 
b.一致性(Consistency)
 事务必须保证数据库从一个一致性状态转换到另一个一致性状态
 
示例:当AB两个帐户在未转帐前两个帐户上的总金额是2000,那么在完成转帐之后,AB两个帐户上的总金额还得是2000。
 
c.隔离性(Islation) (重点)
 当多个用户并发的向数据库发生访问时,数据库为每一个用户分别开启一个事务,事务与事务的数据是不允许相互干扰的,
 要将多个事务之间相互隔离开来。
d.持久性
 一旦事务被commit,那么数据库就必须将数据进行永久保存,即使之后数据库发生了故障,也不能影响到已经被提交了的数据。
3.四种隔离级别
1).在列举这四种隔离级别之前,先来说一下如果不设置隔离级别的话,会造成的以下三种问题:
a.脏读
 
有AB两个事务,AB都并发开启事务,A查询到了B还未commit提交的数据,这就叫脏读。
b.不可重复读
 
A开启了一个事务,写了一条查询某一条记录的select语句,得到了一个结果,当再次执行
这个select语句时,得到的结果与先前的结果不同,这就是不可重复读。注意:不可重复读
这种现象,不可以说是对的,也不可以说是错的,要看使用场景。
c.虚读(幻读)
 
有AB两个事务,AB都并发开启事务,B事务insert了一条新的记录,还未提交,然后A再查询这张表
中所有的记录,发现多了一条新记录;然后B事务rollback;commit;A事务再查询这张表中所有的记录,
发现刚刚多出的一条新记录消失了,这就是虚读。
2)隔离的四种级别
a.serializable 这是最高级别,可以避免上述三种问题的发生,但是是单线程  性能最低
 
b.repeatable read:可以避免 脏读 不可重复读  但可能会发生虚读 
 
c.read committed:可以避免脏读 不可避免不可重复读,虚读
 
d.read uncommitted:脏读,不可重复读,虚读都可能会发生 ,但性能最高
 
注:MySQL数据库的默认事务级别是repeatable read,并且MySQL数据库支持上述四种隔离级别。
Oracle数据库只支持serializable 和 read committed 这两中隔离级别。
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论