您的位置:首页 > 数据库 > Oracle

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的事务 跟 视图了,,其实挺简单的,,,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息