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,是无法回退的。
来源:oschina
链接:https://my.oschina.net/u/4261498/blog/3237964