【Oracle11g】15_事务

六月ゝ 毕业季﹏ 提交于 2020-04-17 08:27:43

【推荐阅读】微服务还能火多久?>>>

1.什么是事务?

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。
事务是一个不可分割的工作逻辑单元。

例如:银行转账过程就是一个事务。它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据。

2.事务的特性(ACID)

2.1 原子性

原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。

2.2 一致性

一致性(Consistency):当事务完成时,数据必须处于一致状态
案例说明

-- 建表
create table student(sno number,sname varchar2(100),sage number);
insert into student values(1,'Mike',11);
insert into student values(2,'John',22);
insert into student values(3,'Tom',33);
insert into student values(4,'Logan',44);
commit;

在窗口1中进行数据的更新,然后新打开窗口2,查询出来的数据为更新后的数据,这个例子就说明了数据库的一致性。

一致性读
例如:现在表student非常的大,执行select * from student where sno=4 这条记录需要半小时,那么假如10:00我执行这条命令,我在等待数据执行的时候,10:20另外一个用户执行了update student set sage=66 where sno=4;commit; 到10:30的时候第一条select 语句才返回查询结果,那么返回的记录中sage是修改前的还是修改后的呢?
答案是:修改前的,undo段里保留了修改前的数据

2.3 隔离性

隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务

我们先在窗口1中修改sno=4的记录,不提交的情况下,在窗口2中修改sno=4的记录,此时我们会发现,在窗口2中被hang住了。当我们在窗口1中执行commit的时候,窗口2也会自动执行update

2.4 永久性

永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

永久性表示数据一旦被更新提交后,就会永久保存在数据库中,直到下次更新。

3.事务的命令

Oracle11g中的事务相关的命令:commit savepoint rollback
Sql*plus中,设置是否自动提交:set autocommit on|off

3.1 savepoint案例演示


SQL> create table cust_info(id number,name varchar2(10));

表已创建。

SQL> insert into cust_info values(1,'aa');

已创建 1 行。

SQL> savepoint mark1;

保存点已创建。

SQL> update cust_info set name='bb';

已更新 1 行。

SQL> savepoint mark2;

保存点已创建。

SQL> delete from cust_info;

已删除 1 行。

SQL> savepoint mark3;

保存点已创建。

SQL> insert into cust_info values(1,'cc');

已创建 1 行。

SQL> select * from cust_info;

        ID NAME
---------- ----------
         1 cc

SQL> rollback to savepoint mark2;

回退已完成。

SQL> select * from cust_info;

        ID NAME
---------- ----------
         1 bb

SQL>  rollback to savepoint mark3;
 rollback to savepoint mark3
*
第 1 行出现错误:
ORA-01086: 从未在此会话中创建保存点 'MARK3' 或者该保存点无效

上述案例中,从上往下依次设立了mark1、mark2、mark3三个事务点,但是如果回退到mark2,则再想回退到mrak3,是无法回退的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!