Oracle修炼路程--事务操作以及隔离级别

事务概念
作为单个逻辑工作单元执行的一系列操作。
比如张三向李四转账1000,那么张三钱数-1000,而李四+1000;

事务特性:ACID
Atomicity原子性:要么都成功,要么都失败;
Consistency一致性:事务执行前后,总量保持一致;
Isolation隔离性:各个事务并发执行时,彼此独立;
Durability持久性:持久化操作。

事务的生命周期:
MySQL:自动提交;
Oracle:手工提交。

1 事务开始标志:第一条DML,增删改;
既当执行DML语句,开启事务操作。
2 事务的中间过程:各种DML操作;
3 事务的结束标志包括两种情况
a 提交:
显示提交:commit: 提交当前事务或有问题的事务

隐示提交:自动提交,正常退出exit、DCL(grant…to…,revoke…from…),DDL(创建表create,drop)

b 回滚:
1 显示回滚:rollback: 撤销 当前事务或有问题的事务
2 隐士回滚:异常退出(断电);

--查询emp表
SQL> select *from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-12-80           1200                    20
      7499 ALLEN      SALESMAN        7698 20-2-81           2000        300         40
      7521 QINJIALI_3 SALESMAN        7698 22-2-81           1650        500         30
      7566 JONES      MANAGER         7839 02-4-81           4575                    20
      7654 MARTIN     SALESMAN        7698 28-9-81           1650       1400         40
      7698 BLAKE      MANAGER         7839 01-5-81           4450                    30
      7782 CLARK      MANAGER         7839 09-6-81           4050                    10
      7788 SCOTT      ANALYST         7566 19-4-87           3400                    20
      7839 KING       PRESIDENT            17-11-81           7000                    10
      7844 TURNER     SALESMAN        7698 08-9-81           1900                    30
      7876 ADAMS      CLERK           7788 23-5-87           1500                    20
      7900 JAMES      CLERK           7698 03-12-81           1350                    30
      7902 FORD       ANALYST         7566 03-12-81           3400                    20
      7934 MILLER     CLERK           7782 23-1-82           1700                    10

已选择14行。
--更新数据
SQL> update emp set ename='QIN_JIALI' where empno=7521;

已更新 1 行。

SQL> select *from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-12-80           1200                    20
      7499 ALLEN      SALESMAN        7698 20-2-81           2000        300         40
      7521 QIN_JIALI  SALESMAN        7698 22-2-81           1650        500         30
      7566 JONES      MANAGER         7839 02-4-81           4575                    20
      7654 MARTIN     SALESMAN        7698 28-9-81           1650       1400         40
      7698 BLAKE      MANAGER         7839 01-5-81           4450                    30
      7782 CLARK      MANAGER         7839 09-6-81           4050                    10
      7788 SCOTT      ANALYST         7566 19-4-87           3400                    20
      7839 KING       PRESIDENT            17-11-81           7000                    10
      7844 TURNER     SALESMAN        7698 08-9-81           1900                    30
      7876 ADAMS      CLERK           7788 23-5-87           1500                    20
      7900 JAMES      CLERK           7698 03-12-81           1350                    30
      7902 FORD       ANALYST         7566 03-12-81           3400                    20
      7934 MILLER     CLERK           7782 23-1-82           1700                    10

已选择14行。

--回滚
SQL> rollback;

回退已完成。

SQL> select *from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-12-80           1200                    20
      7499 ALLEN      SALESMAN        7698 20-2-81           2000        300         40
      7521 QINJIALI_3 SALESMAN        7698 22-2-81           1650        500         30
      7566 JONES      MANAGER         7839 02-4-81           4575                    20
      7654 MARTIN     SALESMAN        7698 28-9-81           1650       1400         40
      7698 BLAKE      MANAGER         7839 01-5-81           4450                    30
      7782 CLARK      MANAGER         7839 09-6-81           4050                    10
      7788 SCOTT      ANALYST         7566 19-4-87           3400                    20
      7839 KING       PRESIDENT            17-11-81           7000                    10
      7844 TURNER     SALESMAN        7698 08-9-81           1900                    30
      7876 ADAMS      CLERK           7788 23-5-87           1500                    20
      7900 JAMES      CLERK           7698 03-12-81           1350                    30
      7902 FORD       ANALYST         7566 03-12-81           3400                    20
      7934 MILLER     CLERK           7782 23-1-82           1700                    10

已选择14行。

保存点 savepoint:
语法:
当执行rollback时,通过指定保存点可以回退到指定的点。
回退事务的几个重要操作
1.设置保存点 savepoint 保存点名
2.取消保存点a之后事务 rollback to 保存点名
3.取消全部事务 rollback

注意:这个回退事务,必须是没有commit前使用的;

SQL> create table student(stuno number,stuname varchar2(20));

表已创建。

SQL> insert into student values(12,'QINJIALI');

已创建 1 行。

SQL> insert into student values(13,'QINWENXI');

已创建 1 行。

SQL> select *from student;

     STUNO STUNAME
---------- --------------------
        12 QINJIALI
        13 QINWENXI

SQL> savepoint hello;

保存点已创建。

SQL> insert into student values(14,'张飞');

已创建 1 行。

SQL> select *from student;

     STUNO STUNAME
---------- --------------------
        12 QINJIALI
        13 QINWENXI
        14 张飞

SQL> rollback to savepoint hello;

回退已完成。

SQL> select *from student;

     STUNO STUNAME
---------- --------------------
        12 QINJIALI

事务的隔离级别:
一个事务对数据库的修改与并行的另一个事务的隔离程度。
首先介绍一下,事务带来的问题:
1 脏读:当一个事务正在访问数据,并对此数据进行了修改(1–>2),但是这种修改还没有提交到数据库(commit);此时,另一个事务也在访问该数据。本质:某个事务(客户端)读取的数据是过时的(另一个事务还没有commit)。
简单说:一个客户端读取的是旧数据;
2 不可重复读:在一个事务(客户端)内,多次读取同一个数据,但是结果不同。 本质:就是事务A拿到了被其他事务B修改并提交后的数据。
3 幻读(虚读):在一个事务(客户端)内,多次读取同一批数据,但是结果不同。

从操作语句来区分:
不可重复读:update
幻读:insert,delete

隔离级别:
在这里插入图片描述

四种类隔离级别的程度是依次递进(解决并发的效果,越来越稳定),但是性能越来越低,并发性、可用性本身就是矛盾的。
oracle只支持两种:Read Committed(默认),Serializable(序列化,并行化)
(oracle自身扩充了一种read only,实际隶属于Serializable级别);

切换隔离级别:
set transaction isolation level Serializable;

SET TRANSACTION READ ONLY;

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值