oracle学习笔记(二十):事务


回顾什么是事务?

多个不可分割的操作形成一个整体,该整体要么全部执行成功,要么全部执行失败。例如:转账;

回顾为什么要用事务?

如果不用事务的话,以转账为例,可能出现一个用户钱被扣了,但是另一个用户的钱却没有增加;

回顾在项目中,事务应该用于哪一层?

事务要放在业务层;

 

回顾 jdbc 中,如何使用事务?

connection.setAutoCommit(false); // 开启事务

pstmt.executeUpdate(); // 操作数据库

connection.commit(); // 提交事务

connection.rollback(); // 回滚事务

回顾 hibernate 中,如何使用事务?

transaction.begin(); // 开启事务

session.save(new User()); // 操作数据库

transaction.commit(); // 提交事务

transaction.rollback(); // 回滚事务

回顾 spring 编程中,如何使用事务?

spring 可以分为二种:

>编程式事务,藕合

>声明式事务,解藕,提倡 

注意:

jdbc/dbutils 速度快,但书写烦;

mybaits 速度中等,但书写"中等";

hibernate 速度慢,但书写"爽";

 

回顾 MySQL 的事务开始:start transaction;

 

Oracle 的事务只针对 DML 操作,即 select/insert/update/delete;

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  -- 幻读,不可重复读,脏读,效率低
      
Oracle 只支持两种事务隔离级别:

read committed 和 serializable;

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

set transaction isolation level serializable;

演示两个用户同时操作 emp 表,删除 SCOTT 这条记录,会有什么后果?

因为有隔离级别的存在,所以不会出现两个用户都删除了 SCOTT 这条记录;

一定是一个用户删除 SCOTT 成功,在该用户没有提交的情况下,另一个用户等待;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值