oracle事务+oracle视图

来源:互联网 发布:php artisan数据库 编辑:程序博客网 时间:2024/05/16 00:56

事务:

学习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 中有四种隔离级别

  1. 分别是 uncommited read 读未提交的,(默认)
  2. commited read 读已提交的
  3. Repeatable read 可重复读
  4. 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的事务 跟 视图了,,其实挺简单的,,,

原创粉丝点击