首页 > 数据库技术 > 详细

2.数据库事务

时间:2021-04-12 22:35:06      阅读:27      评论:0      收藏:0      [点我收藏+]
  1. 什么叫数据库事务?
    事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。

    • 逻辑操作单元:一个或多个DML操作。
  2. 事务处理的原则:
    保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。

  3. 数据一旦提交,就不可回滚。

  4. 哪些操作会导致数据的自动提交?

    • DDL操作一旦执行,都会自动提交。
    • DML默认情况下,一旦执行,就会自动提交。
      • 我们可以通过set autocommit = false的方式,取消DML操作的自动提交。这种方式对DDL是无效的,DDL就相当于一个独立的事务了
    • 默认在关闭连接的时候,会自动提交数据。
      • 这样就可以分为三段式去写代码,获取连接-->一组DML操作-->关闭连接。(这样在DML操作中出现问题的时候,只要中间连接还没有关闭,并且设置了DML没有自动提交。就可以回滚到之前的状态。)
        代码中具体是先获取连接connection-->设置取消自动提交-->将connection当做参数传进update()-->catch到异常后rollback-->关闭连接之前记得恢复设置自动提交(在数据库连接池中,你把该连接归还到连接池,别人再去用此连接的时候,尽量恢复到之前的默认状态供别人使用。)
  5. 事务的ACID属性。

    • 原子性(Atomicity)
      原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

    • 一致性(Consistency)
      事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

    • 隔离性(Isolation)
      事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

    • 持久性(Durability)
      持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

  6. 数据库的并发

    • 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:

      • 脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段。之后, 若 T2 回滚, T1读取的内容就是临时且无效的。
      • 不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段。之后, T1再次读取同一个字段, 值就不同了。
      • 幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行。之后, 如果 T1 再次读取同一个表, 就会多出几行。
    • 数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题。

    • 一个事务与其他事务隔离的程度称为隔离级别。数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱。

    • 四种隔离级别:
      技术分享图片

      • Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ COMMITED
      • Mysql 支持 4 种事务隔离级别。Mysql 默认的事务隔离级别为: REPEATABLE READ。

2.数据库事务

原文:https://www.cnblogs.com/forrestyu/p/14649887.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!