1、mySQL教学第10章事务和锁本章内容o 10.1 事务(Transact)介绍o 10.2 事务的特性o 10.3 事务的类型o 10.4 事务控制语句o 10.5 事务并发产生的问题o 10.6 锁 表级锁 行级锁o 10.7 事务和锁综合练习10.1事务(Transact)介绍o 事务是指一个逻辑单元的工作任务,这些工作任务要么全做,要么全部放弃。o 它必须同时满足四个特性:n 原子性n 一致性n 隔离性n 持久性10.2事务特性1o 原子性(Atomic)n 表示组成一个事务的多个数据库操作是一个不可分隔的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任何一个数据库操作失败,
2、已经执行的任何操作都必须撤销,让数据库返回到初始状态。o 一致性(Consistency)n 事务操作成功后,数据库所处的状态和它的业务规则是一致的,即数据不会被破坏。事务特性2o 隔离性(Isolation)n 在并发数据操作时,不同的事务拥有各自数据空间,它们的操作不会对对方产生干扰。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但并发性越弱。o 持久性(Durabiliy)n 一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证能够通过某种机制恢复数据。10.3事务类型
3、1o 自动提交事务n 系统默认每个TRANSACTSQL命令都是一个事务处理,由系统自动开始并提交o 隐式事务:不需要显示开始事务,需要显示提交n 该类事务是任何单独的 INSERT、UPDATE 或者DELETE语句构成。当有大量的DDL和DML命令执行时会自动开始,并一直保持到用户明确提交为止。事务类型2o 显式事务n 该类事务是用户自定义事务,是以START TRANSACTION(事务开始)开头,以 COMMIT TRANSACTION(事务提交)或者 ROLLBACK TRANSACTION(回滚事务)语句结束的。o 分布式事务 n 跨越多个服务器的事务称为分布式事务。自从mySQL
4、5.03就开始支持分布式事务。10.4事务控制1o START TRANSACTION该语句标记一个显式事务的开始点,即事务开始。其语法如下:START TRAN|TRANSACTION transaction_name|tran_name_variable WITH MARK description ;o COMMIT TRANSACTION该语句标志一个成功的隐性事务或显式事务的结束,即事务提交。其语法如下:COMMIT TRAN|TRANSACTION transaction_name|tran_name_variable ;.事务控制2o ROLLBACK TRANSACTION 该语
5、句将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。其语法如下:ROLLBACK TRAN|TRANSACTION transaction_name|tran_name_variable|savepoint_name|savepoint_variable ;o SET AUTOCOMMIT 可以修改当前连接事务提交方式。SET AUTOCOMMIT=0,则需要明确的命令进行提交或者回滚。10.5 数据并发的问题1o 1.脏读(Dirty Read)n 脏读是指某个事务(A)读取另外事务(B)尚未提交的更改数据,并在这个数据的基础上操作。如果恰巧 B事务回滚,那么 A事务读到的数据根本是
6、不被承认的。o 2.不可重复读(Unrepeatable Read)n 不可重复读是指 A事务读取了 B事务已经提交的更改数据。数据并发的问题2o 3.幻象读(Phantom Read)n A事务读取B事务提交的新增数据,这时 A事务将出现幻象读的问题。o 4.第一类丢失更新n A事务撤销时,把已经提交的B事务的更新数据覆盖了。o 5.第二类丢失更新 n A事务覆盖B事务已经提交的数据,造成 B事务所做操作丢失。10.6 锁(Lock)o 数据库中的锁是指一种软件机制,用来控制防止某个用户(进程会话)在已经占用了某种数据资源时,其他用户做出影响本用户数据操作或导致数据非完整性和非一致性问题发生
7、的手段。n 锁概述n MySQL锁和数据库引擎n InnoDB和MyISAM支持表级锁n InnoDB事务实现的行级锁MySQL锁和数据库引擎o 相对于其他数据库而言,MySQL的锁机制比较简单,最显著的特点是不同的存储引擎支持不同的锁机制。o MyISAM和MEMORY存储引擎采用表级锁o DBD存储引擎采用的是页面锁和表级锁。o InnoDB支持行级锁、表级锁,默认情况采用行级锁。三种粒度锁的特性o 表级锁n 开销小,加锁快,不会出现死锁,锁定力度大,发生冲突所的概率高,并发度低。o 行级锁n 开销大,加锁慢,会出现死锁,锁定力度最小,发生锁冲突的概率最低,并发度高。o 页面锁n 开销和加
8、锁时间介于表锁和行锁之间,会出现死锁,锁定力度介于表和行行级锁之间,并发度一般。MySQL表级锁的锁模式o 表共享锁(Table Read Lock)o 表独占锁(Table Write)表级锁o 给TStudent表和TScore表添加读锁n lock tables TStudent read,TScore read;n lock tables TStudent read local,TScore read local;Local参数允许在表尾并发插入如果加的read锁,只能读取不能够更改数据,并且只能访问加锁的表。o 解锁表n unlock tables添加表级写锁o 给TStudent表
9、添加写锁n lock tables TStudent writeMySQL的InnoDB引擎行的锁o 共享锁(S)InnoDB引擎,共享锁用于所有的只读数据操作o 独占锁(X)n为修改数据而保留的,它所锁定的资源,其他事务不能读取也不能修改。o 意向共享锁(IS)o 意向独占锁(IX)n意向锁是InnoDB内部使用的,这两种意向锁都是表锁,比如事务打算给行加共享锁,先在表上添加IS锁锁与SQl语句o 对于Update Delete和Insert语句 InnoDB会自动给涉及数据集加排它锁o 对于select语句InnoDB不加任何锁,可以显示加锁。Select*from TStudent2 where studentid=00001 for update Select*from TStudent2 where studentid=00001 lock in share modeo Lock in share mode 是共享锁,如果加锁记录后进行更改使用for update综合练习o 在myISAM引擎上的表锁o 在InnoDB引擎上的事务产生的锁
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。