• 数据库事务整理


      1.首先是事务的概念:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。举个例子:比如银行转账问题,A给B转账100块钱,应该是要分为两步操作,第一显示A的余额-100,再就是B的余额+100,这两个操作要么都成功,要不都不能成功,这两个操作是一个不可拆分的,也就是下面说的原子性。

      2.再就是事务的四大特性:原子性,一致性,隔离性,持久性。

      3.如果在没有多线程控制机制的情况下,多个事务并发执行,会发生以下几个问题:

        脏读:A事务读取数据库的某条记录,但是这条记录是B事务更新未提交的,所以,A事务读取的数据很可能因为B事务回滚而导致数据不正确。

        不可重复读:A事务连续读取数据库的某条已被提交的记录,但是B事务在A事务读取的间隙又对该记录更新并提交了,A事务读取的多次数据就会不正确。

        幻读:

      4.对于处理以上四种情况,有四个级别的处理方案:Read Uncommitted,Read Committed,Repeatable Read,serializable(读未提交、读已提交、可重复读、串行化)

        Read UnCommitted:事务的各种问题均无法避免,因为数据库允许某事物读取未提交的数据。

        Read Committed: 可以防止脏读,因为数据库只允许事务读取的时候读取已提交的数据,因此数据库不得不采用锁,此级别锁行。

        Repeatable Read:可以防止脏读和不可重复读问题,因为此级别下某事物读取数据将会禁止写数据的其他事务(但允许读事务),写事务则禁止任何其他事。

        Serializable: 最狠的一种,要求每个事务已串行化的方式进行执行,A事务不结束B事务不能开始,知道A事务完成才行。

        注意:四大隔离级别从上到下越来越安全,安全的代价就是性能,为了防止多线程事故,数据库只能加锁,这就限制了性能,而且还可能出现死锁,所以

        选用隔离级别的候要小心选用。

      5.常见数据库的隔离级别

        mysql具有四大隔离级别,默认为Read Committed,设置隔离级别语句为:

        SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

        Oracle中只有两隔离级别:Read Committed和Serializable,默认为Read Committed。

  • 相关阅读:
    SQL Pass北京举办第11次线下活动,欢迎报名(本次活动特别邀请了来自微软总部Xin Jin博士)
    【转】go中struct初始化的3种方式
    ubuntu网络的nameserver配置
    【转】路由器LAN口IP地址到底是什么?
    SSH -R 反向端口转发---通过一台阿里云的服务器来访问公司内部网络种的电脑
    ubuntu桌面系统rdesktop远程到win10报错
    非正常退出网页
    【转】xargs命令
    shell 管道符| 后面的xargs 一次执行多条命令,用xargs获取到的参数
    【转】做一名合格的程序员(learning of a previous team)
  • 原文地址:https://www.cnblogs.com/WreckBear/p/5793806.html
Copyright © 2020-2023  润新知