4.7 事务处理
4.7.1 事务概述
事务的4种属性:acid
(1)原子性(atomic):事务是一个整体的工作单元,要么全部执行,要么全部取消。
(2)一致性(consistency):所有的数据都保持一致状态。
(3)隔离性(isolated):事务所在的修改必须与其他事务所在的修改隔离。
(4)持久性(durability):事务提交后,修改就会永久保存下来。
4.7.2 操作事务
隐式自动开始
结束标志:
(1)执行commit语句提交事务
(2)执行rollback语句撤销事务
(3)执行一条数据定义语句,如create,drop或alter语句。执行成功,自动执行commit语句,否则指定执行rollback语句
(4)执行一个数据控制命令,如grant,revoke等,自动执行commit命令
(5)正常断开数据库的连接,正常退出sqlplus环境
1、提交事务(commit语句)
提交事务时,oracle系统内部会按照如下顺序进行处理:
(1)在回滚段内记录当前事务已提交,并且声称一个唯一的系统编号(SCN),以唯一标识这个事务。
(2)启动后台的日志写入进程(LGWR),将SGA区的重做日志缓冲区中的数据和当前事务的SCN写入重做日志文件中。
(3)oracle服务器开始释放事务处理所使用的系统资源。
(4)显示通知,告诉用户事务已经成功提交。
SQL> select * from jobs_temp;
no rows selected
SQL> insert into jobs_temp values('DESIGN','设计人员',3000,5000);
1 row created.
SQL> commit
2 ;
Commit complete.
2、回滚事务
回滚事务是指撤销对数据库进行的全部操作,oracle利用回滚段来存储修改前的数据,通过重做日志来记录对数据所做的修改。如果要回滚整个事务,oracle系统内部将会执行如下操作过程:
(1)使用回滚段中的数据撤销对数据库所做的修改
(2)oracle后台服务进程释放掉事务所使用的系统资源
(3)显示通知,告诉用户事务回滚成功
SQL> truncate table jobs_temp;
Table truncated.
SQL> col job_id for a20;
SQL> col job_title for a30;
SQL> insert into jobs_temp values('OFFICE','办公文员',3000,5000);
1 row created.
SQL> savepoint sp;
Savepoint created.
SQL> insert into jobs_temp values('FINANCE','财务人员',4000,8000);
1 row created.
SQL> select * from jobs_temp;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
-------------------- ------------------------------ ---------- ----------
OFFICE 办公文员 3000 5000
FINANCE 财务人员 4000 8000
SQL> rollback to savepoint sp;
Rollback complete.
SQL> select * from jobs_temp;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
-------------------- ------------------------------ ---------- ----------
OFFICE 办公文员 3000 5000
转载于:https://blog.51cto.com/stonebox/1342106