- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章数据操纵与事务处理
7.5事务控制 事务概念 Oracle事务的隔离级别 Oracle事务处理 7.5.1 事务概念 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的所有操作要么都做,要么都不做,不存在第三种情况。 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态,不存在中间的状态。 隔离性(Isolation):数据库中一个事务的执行不受其他事务干扰,每个事务都感觉不到还有其他事务在并发执行。 持久性(Durability):一个事务一旦提交,则对数据库中数据的改变是永久性的,以后的操作或故障不会对事务的操作结果产生任何影响。 7.5.2 Oracle事务的隔离级别 数据库中事务的并发运行,可能导致下列问题: 丢失修改:两个事务同时读取数据库中的同一数据并进行修改,一个事务提交的结果破坏了另一个事务提交的结果,导致第一个事务对数据的修改丢失。 读“脏”数据:一个事务对数据的修改在提交之前被其他事务读取。 不可重复读:在某个事务读取一次数据后,其他事务修改了这些数据并进行了提交,当该事务重新读取这些数据时就会得到与前一次不一样的结果。 Oracle数据库事务隔离级: READ COMMITED(提交读) 这是事务的默认隔离等级,用于设置语句级的一致性。每个事务所执行的查询操作只能获取在该查询开始之前(不是该事务开始之前)已经提交的数据。该隔离级别可以防止丢失修改和脏读的问题,但不能防止不可重复读的问题。在该级别的事务中可以执行DML操作(若数据被加锁则等待其他事务解锁)。 SERIALIZABLE(串行化) 用于设置事务级的一致性,每个事务只能看到在该事务开始之前已经提交的数据。该隔离级的事务可以防止丢失修改、脏读和不可重复读的问题。在该级别的事务中可以执行DML操作(若数据被加锁则不等待,返回错误)。 如果数据库中具有大量并发事务,并且应用程序的事务处理能力和响应速度是关键因素,则READ COMMITED隔离级比较合适。如果数据库中多个事务并发访问数据的概率很低,并且大部分的事务都会持续执行很长时间,这时应用程序更加适合使用SERIALIZABLE隔离级。 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ALTER SESSION SET ISOLATION_LEVEL =SERIALIZABLE; ALTER SESSION SET ISOLATION_LEVEL =READ COMMITTED; 在Oracle数据库中可以设置事务为Read-Only(只读),每个事务只能看到在该事务开始之前已经提交的数据,并且不能在该事务中对数据进行INSERT,UPDATE,DELETE等操作,从而确保取得特定时间点的数据信息。 SET TRANSACTION READ ONLY; 7.5.3 Oracle事务处理 事务提交方式 用户显式执行COMMIT命令 执行特定操作时系统自动提交。 说明 当事务提交后,用户对数据库修改操作的日志信息由日志缓冲区写入重做日志文件中,释放该事务所占据的系统资源和数据库资源。此时,其他会话可以看到该事务对数据库的修改结果。 当执行CREATE,ALTER,DROP,RENAME,REVOKE,GRANT,CONNECT,DISCONNECT等命令时,系统将自动提交。 事务回滚方式 事务全部回滚 ROLLBACK 事务部分回滚 SAVEPOINT X ROLLBACK TO X ROLLBACK TO B;(回滚最后一个INSERT操作) ROLLBACK TO A;(回滚后面的INSERT操作和UPDATE操作) ROLLBACK;(回滚全部操作) 总结 数据插入 数据修改 数据合并 数据删除 事务控制 * 第7章 数据操纵与事务处理 主要内容 数据插入 数据修改 数据合并 数据删除 事务控制 7.1 数 据 插 入 利用INSERT INTO语句插入数据 利用子查询插入数据 向案例数据库表插入初始数据 向多个表中插入数据 7.1.1 利用INSERT INTO语句插入数据 语法 INSERT INTO table_name|view_name [(column1[,column2…])] VALUES(value1[,values, …]) 注意 如果在INTO子句中没有指明任何列名,则VALUES子句中列值的个数、顺序、类型必须与表中列的个数、顺序、类型相匹配。 如果在INTO子句中指定了列名,则VALUES子句中提供的列值的个数、顺序、类型必须与指定列的个数、顺
文档评论(0)