Oracle的事务管理

事务:表示操作集合,不可分割,要么全部成功,要么全部失败,事务的开始取决于一个DML语句

事务的结束
  1、正常的commit(使数据修改生效)或者rollback(将数据恢复到上一个状态)
  2、自动提交,但是一般情况下要将自动提交进行关闭,效率太低
  3、用户关闭会话之后,会自动提交事务
  4、系统崩溃或者断电的时候回回滚事务,也就是将数据恢复到上一个状态

INSERT INTO EMP(EMPNO,ENAME) VALUES(2222,'ZHANGSAN');
--COMMIT;
--ROLLBACK;
SELECT * FROM EMP;

--SAVEPOINT  保存点
--当一个操作集合中包含多条SQL语句,但是只想让其中某部分成功,某部分失败,此时可以使用保存点
--此时如果需要回滚到某一个状态的话使用 ROLLBACK TO SP1;
DELETE FROM EMP WHERE EMPNO = 1111;
DELETE FROM EMP WHERE EMPNO = 2222;
SAVEPOINT SP1;
DELETE FROM EMP WHERE EMPNO = 1234;
ROLLBACK TO SP1;
COMMIT;

增删改是数据库的常用操作,在进行操作的时候都需要《事务》的保证
事务变得非常关键:
    最主要的目的是为了数据一致性
    如果同一份数据,在同一个时刻只能有一个人访问,就不会出现数据错乱的问题,但是在现在的项目中,更多的是并发访问
    并发访问的同时带来的就是数据的不安全,也就是不一致
    如果要保证数据的安全,最主要的方式就是加锁的方式,MVCC
    事务的延申:
        最基本的数据库事务
        声明式事务
        分布式事务
    为了提高效率,有可能多个操作会在同一个事务中执行,那么就有可能部分成功,部门失败,基于这样的情况就需要事务的控制。
    select * from emp where id = 7902 for update
    select * from emp where id = 7902 lock in share mode.
    如果不保证事务的话,会造成脏读,不可重复读,幻读。

事务的ACID属性

事务四大特征:原子性,一致性,隔离性和持久性。
1. 原子性(Atomicity)
一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工 作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将 会是永久性的。
2. 一致性(Consistency)
▪ 一致性代表了底层数据存储的完整性。它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性 来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑不会导致数据的不 一致(即,数据预期所表达的现实业务情况不相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须与另一账户中存入的金额相等。 支付宝账号100 你读到余额要取,有人向你转100 但是事物没提交(这时候你读到的余额应该是100,而不是200) 这种就是一致性
3. 隔离性(Isolation)
隔离性意味着事务必须在不干扰其他进程或事务的前提下独立执行。换言之,在事务或工作单元执行完毕之前,其所访问的数据不能受系 统其他部分的影响。
4. 持久性(Durability)
▪ 持久性表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。这样可以保证,所作的 修改在任何系统瘫痪时不至于丢失。

MySQL事务测试

提交或回滚前数据的状态
– 以前的数据可恢复
– 当前的用户可以看到DML操作的结果
– 其他用户不能看到DML操作的结果
– 被操作的数据被锁住,其他用户不能修改这些数据
回滚后数据的状态
–语句将放弃所有的数据修改
– 修改的数据被回退.
– 恢复数据以前的状态.
– 行级锁被释放
提交后数据的状态
– 数据的修改被永久写在数据库中.
– 数据以前的状态永久性丢失.
– 所有的用户都能看到操作后的结果.
– 记录锁被释放,其他用户可操作这些记录
 
Commit & Rollback
▪ Commit表示事务成功地结束,此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都以交付实施。每     个Commit语句都可以看成是一个事务成功的结束,同时也是另一个事务的开始。
▪ Rollback表示事务不成功的结束,此时告诉系统,已发生错误,数据库可能处在不正确的状态,该事务对数据库的更新必须被撤
   销,数据库应恢复该事务到初始状态。每个Rollback语句同时也是另一个事务的开始。
▪ 一旦执行了commit语句,将目前对数据库的操作提交给数据库(实际写入DB),以后就不能用rollback进行撤销。
▪ 执行一个 DDL ,dcl语句或从 SQL*Plus正常退出,都会自动执行commit命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值