WEB开发网
开发学院数据库Oracle Oracle数据库入门之DML与事务控制 阅读

Oracle数据库入门之DML与事务控制

 2012-11-28 15:27:20 来源:WEB开发网   
核心提示:when not matched theninsert (eid, name, birth) values(test1.eid, test1.name, test1.birth);select * from test2;说明:set设定的是目标表中的字段,即将源表中的字段值赋给目标表中的字段insert设定的也是将字段
when not matched then
insert (eid, name, birth) values(test1.eid, test1.name, test1.birth);
select * from test2;
说明:set设定的是目标表中的字段。即将源表中的字段值赋给目标表中的字段
insert设定的也是将字段值插入到目标表中。如果要插入全部的字段的值,那么column_list是可以省略的
注意:由于set和insert默认都是对目标表进行操作,所以,它们后面的字段不可以加目标表前缀
即本例中若出现set test2.name=test1.name或insert (test2.eid),执行则出错,提示信息为标识符无效



事务控制
概述:也叫做事务处理。是通过将一组相关操作组合为一个要么全部成功,要么全部失败的逻辑工作单元
以简化错误恢复,提高应用程序的可靠性。这里指的是在数据库层面所进行的一种数据库操作的集成或者说单元化控制
也可以在应用程序层面进行类似的处理。比如说逐个向数据库发送多条DML指令,通过先后更新两个表以对应转账操作
如果后面的一个操作出错了,那么就取消前一个指令,或者进行相反的对冲的操作
但应用程序层面的这种原子的组合,实际上是不可靠的。在数据库的层面或者在底层来进行这种集成,会更有效有些
事务:组成单个逻辑工作单元的一系列操作被称为事务(Transaction)。实际上事务不是仅限于在数据库领域中的一个概念
数据库事务通常由0到多条DML语句或1条DDL(Data Define Language)语句或1条DCL(Data Control Language)语句组成
所谓的单个逻辑工作单元就是能够完成一个相对独立的功能,或者说是不应该分隔开的一个操作系列
比如银行的转账业务,该业务至少可以分为A账户的转出和B账户的转入。也就是从A账户的余额中减掉一定的数额
然后再将B账户的余额增加一定的数额。整个过程等于是修改了两条记录,这两个操作就可以认为就组成了一个事务
它们应该是一个单个的逻辑工作单元,也就是银行的一个单笔业务
ACID:事务必须满足ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
原子性:即事务中所有操作要么全成功,要么全失败,它们应该作为一个整体被处理
一致性:事务执行完毕之后,数据必须处于一致性的状态,不能出现数据状态上的错误。比如将员工工资级别从C升到B级
但工资却没有从应该的4000升到6000,于是就出现了数据的不一致。也就是说这时的工资级别虽然是B级
但工资的数额却属于C级的范围。这就说明事务结束的时候,数据处于一种不一致性的状态,会影响后续的使用
隔离性:这是相对其它事务而言的。有时可能出现多个事务并发执行的情况,比如多个用户同时对同一个数据库表进行操作
碰巧操纵的又是该表的同一个数据。此时应该有这样的一个保证,即当前事务在执行过程中所做的数据状态的改变
是不受其它事务影响的。其它事务所读取或查看的数据,仍是当前事务执行之前的状态
直到当前事务结束,其它事务看到的才会是当前事务结束之后的数据状态
所有事务中间的状态对其它事务而言,是被隔离开的,不受其它事务影响
持久性:当事务执行完毕并提交操作之后,数据将永久生效,永久保存在数据库中,将来不可撤销,不可恢复
开始:事务开始于第一条可执行语句
结束:当遇到commit或rollback语句、遇到DDL或DCL语句、用户会话结束、系统崩溃等情况时会结束事务
提交:在执行一个DDL语句、执行一个DCL语句、正常结束会话等情况下会自动提交事务
提交就是让事务永久生效,不可撤销。回滚就是撤销先前操作,但回滚到事务开始之前的状态时,数据仍然是一致的
回滚:当会话异常终止或系统崩溃时,事务会被自动回滚。事务的显式的提交和回滚操作是为了更好的保证数据的一致性

Tags:Oracle 数据库 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接