《第13周第2次课—第26章事务处理.ppt》由会员分享,可在线阅读,更多相关《第13周第2次课—第26章事务处理.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、IT Education&TrainingDate:09 January 2023第26章管理事务处理IT Education&TrainingDate:09 January 2023本次课的主要内容管理事务处理事务的特点控制事务处理事务隔离级多用户使用问题IT Education&TrainingDate:09 January 2023事务的特点事务的特点从MySQL 4.1开始支持事务,事务是构成多用户使用数据库的基础在MySQL环境中,事务由作为一个单独单元的一个或多个SQL语句组成如果单元中的一个语句不能完成,整个单元就会回滚(撤销),所有影响到的数据将返回到事务开始以前的状态IT E
2、ducation&TrainingDate:09 January 2023事务和ACID属性通过InnoDB和BDB表类型,MySQL事务系统能够完全满足事务安全的ACID测试MyISAM类型不支持事务,这种系统中的事务只能通过直接表锁定实现IT Education&TrainingDate:09 January 2023什么是ACID原则原子性(A)一致性(C)隔离性(I)持久性(D)IT Education&TrainingDate:09 January 2023原子性(A)每个事务都必须认为是一个不可分割的单元一致性(C)不管事务是完全成功完成还是中途失败,当事务使系统处于一致的状态时存
3、在一致性在MySQL中,一致性主要由MySQL日志机制处理IT Education&TrainingDate:09 January 2023隔离性(I)是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到IT Education&TrainingDate:09 January 2023持久性(D)是指即使系统崩溃,一个提交的事务仍然存在,当一个事务完成,数据库的日志已经更新时,持久性就开始发生作用MySQL通过保存一条记录事务过程中系统变化的二进制事务日志文件来实现持久性IT Education&TrainingDate:09 January
4、 2023控制事务处理事务操作原理在MySQL中,当一个会话开始时,系统变量AUTOCOMMIT值为1,即自动提交功能打开的,当用户每执行一条SQL语句后,该语句对数据库的修改就立即被提交成持久性修改保存到磁盘上,一个事务也就结束了IT Education&TrainingDate:09 January 2023如果要一个事务由多条SQL语句组成,必须关闭自动提交:SET AUTOCOMMIT=0;用户可以通过ROLLBACK撤销前面的操作,也可以用COMMIT语句持久化这些操作事务处理只能应用于INSERT、UPDATE和DELETE语句IT Education&TrainingDate:0
5、9 January 2023事务什么时候开始一个应用程序的第一条SQL语句或在COMMIT语句后的第一条SQL语句或在ROLLBACK语句后的第一条SQL语句或使用一条START TRANSACTION语句来显示启动一个事务:START TRANSACTION|BEGIN WORKIT Education&TrainingDate:09 January 2023撤销事务关键字:ROLLBACK它撤销事务所做的修改,并结束当前这个事务语法格式:ROLLBACK WORK AND NO CHAIN NO RELEASEIT Education&TrainingDate:09 January 202
6、3结束事务关键字:COMMIT它使得自从事务开始以来所执行的所有数据修改成为数据库的永久部分,也标志一个事务的结束IT Education&TrainingDate:09 January 2023语法格式:COMMIT WORK AND NO CHAIN NO RELEASEAND CHAIN子句会在当前事务结束时,立刻启动一个新事务RELEASE子句在终止当前事务后,会让服务器断开与客户端的连接MySQL使用的是平面事务模型,因此嵌套的事务时不允许的IT Education&TrainingDate:09 January 2023回滚事务除了撤销整个事务,用户还可以使用ROLLBACK TO
7、语句使事务回滚到某个点,在这之前需要使用SAVEPOINT语句来设置一个保存点IT Education&TrainingDate:09 January 2023SAVEPOINT语法格式SAVEPOINT identifier当前事务对数据进行了更改,则这些更改会在回滚中被撤销,语法格式ROLLBACK WORK TO SAVEPOINT identifier;IT Education&TrainingDate:09 January 2023当事务回滚到某个保存点后,在该保存点之后设置的保存点将被删除RELEASE SAVEPOINT 语句会从当前事务的一组保存点中删除已命名的保存点,不出现提
8、交或回滚,如果保存点不存在,会出现错误,语法格式RELEASE SAVEPOINT identifier;IT Education&TrainingDate:09 January 2023下面几个语句说明事务处理过程1.START TRANSACTION2.UPDATE3.DELETE4.SAVEPOINT S1;5.DELETE6.ROLLBACK WORK TO SAVEPOINT S1;7.INSERT8.COMMIT WORK;IT Education&TrainingDate:09 January 2023事务隔离级为什么需要引入事务的隔离级每一个事务都有一个所谓事务的隔离级,它定义
9、了用户彼此之间隔离和交互的程度。单用户的环境中,这个属性无关紧要:因为在任意时刻只有一个会话处于活动状态多用户环境中,许多会话在任一给定时刻都是活动的,此时能够隔离事务是很重要的IT Education&TrainingDate:09 January 2023MySQL提供的隔离级(根据ANSI/ISO SQL规范)序列化(SERIALIZABLE)可重复度(REPEATABLE READ)提交读(READ COMMITTED)未提交读(READ UNCOMMITTED)IT Education&TrainingDate:09 January 2023定义事务隔离级关键字:SET TRANSA
10、CTION一般语法格式SET GLOBAL|SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE|REPEATABLE READ|READ COMMITTED|READ UNCOMMITTED;IT Education&TrainingDate:09 January 2023GLOBAL:定义的隔离级将适用于所有SQL用户SESSION:隔离级只适用于当前运行的会话和连接序列化:用户之间通过一个接一个顺序地执行当前的事务,提供了事务之间最大限度的隔离可重复读:在这一级上,事务不会被看成是一个序列,如果用户在同一个事务中执行同条SELECT语句数次,结
11、果总是相同的IT Education&TrainingDate:09 January 2023提交读处于这一级的事务可以看到其他事务添加的新纪录,而且其他事务对现存纪录做出的修改一旦被提交,也可以看到。未提交读可以读到其他事务没有提交的数据MySQL中,默认为REPEATABLE READ隔离级IT Education&TrainingDate:09 January 2023多用户使用问题几个概念丢失更新(lost update)指当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,因此最后的更新将重写由其他事务所做的更新,将导致数据丢失IT Education&TrainingDate:09 January 2023脏读(dirty read)指一个事务正在访问数据,而其他事务正在更新该数据,但尚未提交,此时就会发生脏读问题不可重复读(unrepeatable read)当一个事务多次访问同一行而且每次读取不同的数据IT Education&TrainingDate:09 January 2023幻读(phantom read)当一个事务对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻读
限制150内