oracle事务+oracle视图
2017-12-03 21:34
387 查看
事务:
学习oracle事务前,我们先来回顾一下mysql的事务原子性
事务是一组操作,要么成功,要么失败
一致性
操作实现前后数据总量必须保持不变,如转账,不能加多减少,也不能减少加多
隔离性
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
脏读
读到别的事务未提交的数据,当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。
解决方案 : 设置隔离级别 read commited
-不可重复度
不可重复读的意思是在一次事务中多次查询的数据不一致,这是由于在查询间隔,被另一个事务修改并提交了。例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。也就是多次读取的数据不一致,
解决方案 :设置隔离级别 Repeatable read,
-虚读,幻读
虚度其实就是一个人 T1 在修改数据库数据时,a = 1,把a 改成了2,然后过了一会,另一个人 T2 把a 改成了1, 然后这时 T1 有查数据库,a 还是 1 ,会误以为数据没有改过来,这就是虚读,
虚读跟 不可重复读的结果都是差不多的,都是多次读到的数据不一样, 但是 不可重复读读的是被修改的数据, 也就是重心在修改上面,而幻读的是信息总记录数不一样,也就是侧重与增删,
解决方案 :设置隔离级别 Serializable ,不过这种方法不会使用,
mysql 中有四种隔离级别
分别是 uncommited read 读未提交的,(默认)
commited read 读已提交的
Repeatable read 可重复读
servalizable 序列化的(不会使用)
其实oracle数据库中的隔离级别跟mysql的差不多,有以下几点
READ COMMITTED 读已提交的,默认的
SERVALIZABLE 序列化的
READ ONLY 只读, 意思就是 大家都只能看,不能修改
保存点
oracle中事务设置了保存点,保存点的作用是将大事务划分为较小的片段,就好比如数据拷贝 ,
需求, 我们要拷贝一个九百万条信息的数据库,
如果没有使用回滚点的话,假如已经赋值了八百万条记录,然后一个异常,我们又要重新开始,就相当于浪费了八百万条记录,
如果我们使用了回滚点的话,假设我们设置成 100万条记录一个回滚点, 当我们读到850万条记录的时候发生了异常,我们就回滚到800万那个回滚点,那也就才浪费了50万条记录,相比原先的,这种方式还是有较大的的优势的,
将事务(transaction)回滚(roll back)到某个保存点(savepoint)的过程如
下:
回滚到回滚点之后的第一条sql语句,又继续执行,
Oracle 保留指定的保存点,但其后创建的保存点都将被清除
Oracle 释放此保存点后获得的表级锁(table lock)与行级锁(row
lock),但之前的数据锁依然保留。
被部分回滚的事务(transaction)依然处于活动状态,可以继续执行。
声明回滚点的方式
savepoint ‘rolbackName’;
那么问题来了,我们怎么try catch 呢? 我们使用 pl/sql编程
//创建一个表 create table lou( f number primary key ); -- 声明部分 begin -- 业务逻辑 insert into lou values(1); insert into lou values(2); insert into lou values(3); savepoint aa; //声明回滚点 insert into lou values(3); insert into lou values(4); insert into lou values(5); commit; //执行完毕就提交 exception -- 捕获异常 when others then -- 处理异常 rollback to aa; // 回到名为aa的保存点 commit; end;
以上就是oracle的事务,
视图view
视图只是将查询结果进行封装,视图不存在任何数据,数据存放在原来的表中作用 :
封锁重要信息
封锁复杂查询语句
封锁一些重要细节
语法
语法: create [or replace] view 视图名称 as 查询语句 [with read only] [or replace]参数的作用是,如果原先存在试图,就覆盖掉, [with read only]参数的作用是,如果没有写该参数的话,那么使用该视图的人就可以根据该视图修改原表中的内容,
demo
在上图中,我们可以看到,很多信息被屏蔽了,别忘了,视图只是封装了查询语句,它本身不会存储任何数据,所以我们修改视图影响的最终是原表,
视图同义词 :
其实也就是给视图增加一个备注,然后我们就可以根据备注来查询到备注的视图
语法
create synonym '备注' for '视图名';
这些就是oracle的事务 跟 视图了,,其实挺简单的,,,
相关文章推荐
- 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务
- oracle事务和锁
- oracle全攻略——ACID事务
- Oracle 中如何手工提交Cluster Table的事务
- oracle链接SQLSERVER,事务语句的提交
- 万能数据库查询分析器中的事务管理在Oracle中的应用
- Oracle-事务处理开始与结束情况;事务的保存点
- oracle/事务
- 【DB.Oracle】事务transaction的隐式提交commit
- 转:oracle 事务
- oracle分布式处理时报“ORA-02041: 客户数据库未开始一个事务处理”解决办法 - z
- 关于Oracle事务的总结
- oracle自治事务
- Oracle分布式事务故障处理
- oracle事务 行级锁 保存点 回滚 提交
- Oracle Autonomous Transactions(自治事务)
- Oracle 11g学习笔记--数据库事务
- oracle实战第三天--事务处理与函数
- Oracle之事务
- oracle实战第三天--事务处理与函数