第26章 管理事务处理

上传人:痛*** 文档编号:243911746 上传时间:2024-10-01 格式:PPT 页数:27 大小:439.50KB
返回 下载 相关 举报
第26章 管理事务处理_第1页
第1页 / 共27页
第26章 管理事务处理_第2页
第2页 / 共27页
第26章 管理事务处理_第3页
第3页 / 共27页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,管理事务处理,第,26,章 管理事务处理,一、事务的基本概念,1,、什么是事务,所谓事务,从物理上讲是指,,DBMS,对用户所执行操作的监控:成功即提交,失败则回滚。,2,、事务的特性,事务具备,ACID,四个特性:,A,:,Atomic,,即原子性,C,:,Consistency,,即一致性,I,:,Isolation,,即隔离性,D,:,Durability,,即持久性,(,1,),Atomic,,即原子性,指一个事务就是一个不可分割的工作单元。只有该事务中所有的操作都执行成功,才算整个事务成功;事务中任何一个,SQL,语句执行失败,那么已经执行成功的,SQL,语句也必须撤销,,DB,状态退回到事务执行之前的状态。,为什么需要“原子性”?,A,、主观上的希望,原子操作的结果只有两个:成功与失败。而对于非原子操作,则可能出现多种结果,这样程序员需要处理的情况就太多了。,B,、业务上的需要,如转账业务,(,2,),Consistency,,即一致性,指事务不能破坏关系数据的完整性及业务逻辑上的一致性。,如,转账事务应保证转出账户与转入账户余额的和不变。,(,3,),Isolation,,即隔离性,指一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。,(,4,),Durability,,即持久性,指只要事务成功结束,它对,DB,所做的更新就永久性的保存了下来。即使发生系统崩溃,重启,DBS,后,,DB,还能恢复到事务成功结束时的状态。,二、控制事务处理,1,、事务的开启与回滚,select*from,student_course,;,start transaction;,delete from,student_course,;,select*from,student_course,;,rollback;,select*from,student_course,;,开启事务,删除,course,表中所有记录,回滚事务,事务回滚指,将数据恢复到执行某些,SQL,语句之前的状态。,2,、事务的提交,select*from,student_course,;,start transaction;,delete from,student_course,;,select*from,student_course,;,commit;,select*from,student_course,;,开启事务,删除,course,表中所有记录,提交事务,事务提交指,将对数据的修改写入到持久化设备中。无法恢复到执行某些,SQL,语句之前的状态。,3,、使用保留点,使用保留点可以很方便的控制在一个事务中要回滚的位置。,select*from student_course;,start transaction;,savepoint sp1;,delete from student_course where sid=2011001 and cid=01;,savepoint sp2;,delete from student_course where sid=2011002 and cid=02;,savepoint sp3;,delete from student_course where sid=201100,3 and cid=01;,select*from student_course;,rollback,to sp2;,select*from student_course;,设置保留点,sp1,设置保留点,sp2,设置保留点,sp3,回滚到保留点,sp2,4,、更改默认的提交行为,默认的提交行为是自动提交,即每执行一条语句,都将永久作用于数据库。但,使用如下语句可取消自动提交行为:,set,autocommit,=0;,5,、需要注意的几个细节:,(,1,),DBMS,默认会将对,DB,的每一步操作都视为一个事务。即,每执行一条,SQL,语句,就会产生一个事务。,(,2,)事务处理主要是用来管理,insert,、,update,、,delete,语句的,与,select,无关。,(,3,)回滚对于,create,与,drop,操作是无用的。即,create,与,drop,操作是不能被回滚的。,(,4,)当执行,commit,或,rollback,语句后,本事务会自动关闭。下一个事务将自动开启。,(,5,)保留点越多,越便于控制。,(,6,)保留点在事务处理完成后会自动释放。,上一事务结束,事务成功,事务失败,提交,回滚,回滚,(,7,)事务控制图解,三、事务的并发控制,DB,服务器,DB,缓存,DB,硬盘,DB,日志文件,Client,缓存,Client,所有操作,记入日志,从日志中读,取回滚数据,1,、数据库操作的底层实现细节,在,DB,中对数据库的增、删、改操作,都有自动提交机制。这个自动提交,是将修改后的数据更新到了,DB,的缓存。当然,这些操作都被记入了,DB,的日志文件。当要回滚这个事务中的自动提交过的操作时,,DBMS,会从日志文件中把要回滚的数据重新恢复到缓存中。当然,强制提交(手动提交是一种强制提交,像建表语句这样的数据库定义语句也是一种强制提交)的事务是不能回滚的。因为强制提交是将缓存中的数据写入到了持久化设备,如硬盘中。,当进行了增、删、改操作,但并未强制提交时,这些数据也会被自动提交到,DB,的缓存中。但这些数据并不是最终数据,因为它们还未写入到持久化设备中,还可能被回滚。,客户程序访问(增、删、改),DB,服务器时,会先从,DB,服务器的缓存中将数据读入到自己的缓存中。修改后的数据在自己的缓存中,由于访问操作的自动提交功能,会将客户程序缓存中的数据自动提交到,DB,的缓存中。当强制提交后,会将,DB,缓存中的数据持久化到硬盘。当回滚时,会从日志文件中将原有数据恢复。,2,、什么是事务的并发,对于同时运行的多个事务,当这些事务同时访问,DB,中同一个数据时,就出现了事务的并发问题。,3,、事务的并发可能引发的问题,(,1,)丢失更新,(,2,)脏读,dirty reads,(,3,)不可重复的读,non-repeatable reads,(,4,)幻读,phantom read,(,1,)丢失更新,两个事务同时读取了一个,DB,中的某数据,并都对该数据进行了修改。当这两个事务都提交成功,或先成功提交一个事务,然后再回滚一个事务时,那么就会出现更新的丢失:后提交的事务会将先提交的事务所修改的数据覆盖,或回滚事务会将数据恢复到被修改前,而将先提交的事务修改的数据覆盖。,(,2,)脏读,dirty reads,当事务读取了,DB,服务器缓存中还未被提交的数据时,就会发生这种事件。举例来说:,Transaction 1,修改了一行数据,但还未提交。此时,,Transaction 2,读取了这行被修改的数据。如果,Transaction 1,回滚了修改操作,那么,Transaction 2,读取的数据就可以看作是从未存在过的。,(,3,)不可重复的读,non-repeatable reads,当同一个事务两次读取同一行数据,但最终两次得到的数据却不一样,这就是发生了不可重复读。举例来说:,Transaction 1,读取一行数据,然后,Transaction 2,修改该行并提交了修改或删除操作。当,Transaction 1,试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。,(,4,)幻读,phantom read,如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:,Transaction 1,读取满足某种搜索条件的一些行,然后,Transaction 2,插入了符合,Transaction 1,的搜索条件的一行。如果,Transaction 1,重新执行产生原来那些行的查询,就会得到不同的行。,4,、事务的隔离级别,处理事务并发问题的机制,一般使用隔离机制。而一般又有五种隔离级别,分别使用五个静态常量来表示。当然,隔离级别一般是在程序中使用的。不同的语言,其常量表示可能是不一样的。下面是,JDBC,中的常量表示形式。,TRANSACTION_NONE:,不使用事务,TRANSACTION_READ_UNCOMMITTED:,允许读未提交数据,即允许脏读,TRANSACTION_READ_COMMITTED:,不允许读未提交数据,即禁止脏读,是默认的,TRANSACTION_REPEATABLE_READ:,可以重复读,即防止不可重复读,TRANSACTION_SERIALIZABLE:,事务串行化,即取消并发,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!