美文网首页我爱编程
数据库隔离级别及事务概念

数据库隔离级别及事务概念

作者: kk爱自由 | 来源:发表于2018-08-08 22:07 被阅读0次

    事务

    • 事务是逻辑上的一组操作,所谓一组即是说明这一组操作具有逻辑上的关系,例如原子性:组成事务的逻辑单元不可分割。隔离性:事务的执行不应该受到其他事务的影响。一致性:事务执行前后,数据完整性保持一致。持久性:事务一旦提交后,就会持久化(保存)到数据库中。

    事务并发引起的安全问题

    事务的概念是相对于多个事务并发而言的,离开多个事务这个前提来讨论事务是没有意义的
    1.脏读:A读到了B正在update但是未commit的数据,举个例子:A老板正在给B发工资5000元,B此时查自己账户上有了5000元,A老板发现B的工资应该是2000元,进行了rollback。这里的B查到的5000元就是脏读数据。
    2.不可重复读:通俗的讲不可重复读意思是,同一个事务重复读取同一数据时出现了前后不一致的问题。举个例子:A查到自己账户上有2000元,打算去消费,此时C盗刷(update)了A的2000元,并提交了事务(commit),A结账的时候账户的2000变成了0,这里前后两次查询到的数据不一致就是不可重复读的问题。
    3.重复读(幻读/虚读):这个概念和不可重复读容易混淆,对比的来说。

    • 不可重复读指的是A事务读到了B事务已经update并commit的数据,导致前后两次读取同一数据不一致。
    • 虚读指的是A事务读到了B事务insert并commit的数据,导致前后两次读取同一数据不一致。

    事务的隔离级别

    • read uncommitted :啥都避免不了,脏读,不可重复读,虚读都会出现
    • read commited : 只能避免脏读(oracle,SqlServer默认都是这一级别)
    • repeatable read :能避免脏读和不可重复读(mysql默认)
    • serializable :(序列化)啥都能避免,有点类似于单线程,性能最低

    在实际编程中遇到的问题:

    • mysql和oracle在update或insert、delete后都要commit,但是mysql的工具例如,sqlyog和navcat默认都自动提交,操作完后不需要手动commit,oracle的工具 plsqldeveloper 默认没有自动提交,只有当手动commit或者关闭当前SQL window时才会提交

    相关文章

      网友评论

        本文标题:数据库隔离级别及事务概念

        本文链接:https://www.haomeiwen.com/subject/qxcfbftx.html