什么是事务?什么是回滚事务,以及四种事务的隔离级别。

一、什么是事务?

  • 事务的定义:事务由单独单元的一个或者多个sql语句组成,在这个单元中,每个mysql语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条sql语句一旦执行失败或者产生错误,整个单元将会回滚,所有受到影响的数据将会返回到事务开始以前的状态;如果单元中的所有sql语句均执行成功,则事务被顺利执行。

  • 事务的四个属性:

     - A、原子性:一个事务不可在分割,要么都执行要么都不执行。
     - C、一致性:一个事务的执行会使数据从一个一致状态切换到另一个一致的状态。
     - I、隔离性:一个事务的执行不受其他事物的干扰
     - D、持久性: 一个事务一旦提交,则会永久的改变数据库的数据
     这四个特性简称为 ACID 特性。
    
  • 为什么要用事务?
    如果不用事务的话,以银行转帐为例,可能会出现一个用户钱增加了,另一个用户钱不变。而因为事务的原子性和一致性,以及隔离性,所以运用事务可以避免这种情况发生。

  • Oracle的事务与MySQL的事务区别
    Oracle的事务只针对DML操作,即select/insert/update/delete
    MySQL的事务开始:start transaction Oracle的事务开始:第一条DML操作做为事务开始

    Oracle的提交事务
    (1)显示提交:commit
    (2)隐藏提交:DDL/DCL/exit(sqlplus工具)
    注意:提交是的从事务开始到事务提交中间的内容,提交到ORCL数据库中的DBF二进制文件

二、什么是回滚事务?

  • Oracle的回滚事务

(1)显示回滚:rollback
(2)隐藏回滚:关闭窗口(sqlplus工具),死机,掉电
注意:回滚到事务开始的地方

  • 什么是回滚点?为什么要设置回滚点?

    什么是回滚点?
    在操作之间设置的一个标志位,用于将来回滚之用。

    为什么要设置回滚点?
    如果没有设置回滚点的话,Oracle必须回滚到事务开始的地方,其间做的一个正确的操作也将撤销。

    使用savepoint 回滚点,设置回滚点a
    savepoint a;

    使用rollback to savepoint,回滚到回滚点a处
    rollback to savepoint a;

注意:如果事务提交后,则之前设置的回滚点就将无效。

  • Oracle之所以能回滚的原因是?
    主要机制是实例池

三、四种事务的隔离级别

  • MySQL支持的四种事务隔离级别及能够解决的问题

    (1)read uncommitted – 不能解决任何缺点
    (2)read committed – 脏读,Oracle默认
    (3)reapatable read – 不可重复读,脏读,MySQL默认
    (4)serializable – 幻读,不可重复读,脏读,效率低

    扩展注意:jdbc/dbutils速度快,但书写烦
    mybaits速度中等,但书写"中等"
    hibernate速度慢,但书写"爽"

1.读未提交(Read Uncommitted)
         引发脏读(读取了未提交的数据)
2.读已提交(Read Committed)
        这是大多数数据库系统默认的隔离级别,但不是MySQL默认的
        只能看见已经提交事务所做的改变
        引发不可重复读,不可重读读意味着我们同一事务执行完全相同的select语句时可能看到不一样的结果。
        ——>导致这种情况的原因可能有:(1)有一个交叉的事务有新的commit,导致了数据的改变;(2)一个数据库被多个实例操作时,同一事务的其他实例在该实例处理其间可能会有新的commit
                多个commit提交时,只读一次出现结果不一致
3.可重复读(Repeatable Read)
        这是MySQL的默认事务隔离级别
        它确保同一事务的多个实例在并发读取数据时,看到同样的数据行
        此级别可能出现的问题--幻读(Phantom Read),当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行
        InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题
4.可串行化(Serializable)
        这是最高的隔离级别
        它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它在每个读的数据行上加上共享锁。
        可能导致大量的超时现象和锁竞争
  • Oracle支持的二种事务隔离级别及能够解决的问题

    Oracle支持:read committed 和 serializable

  • Oracle中设置事务隔离级别为serializable

    set transaction isolation level serializable;

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值