- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
三种数据不一致现象: SELECT ... LOCK IN SHARE MODE 以共享模式读取数据。共享模式执行一个读意味着我们读最新的可用数据,并在我们读的行设置一个共享锁定。共享模式锁防止其它人更新或删除我们已读的行。同时,如果最新的数据属于其它客户端尚未提交的事务,我们等着直到那个事务被提交。 共享锁(S锁或读锁):若事务T对数据对象A加上S锁,则事 务T可以读A但不能修改A,其他事务只能再对A加S锁,而不 能加X锁,直到T释放A上的S锁。这就保证了T释放A上的S锁 之前不能对A做任何修改。 使用锁机制解决三种数据不一致性的示例 MySQL数据库开发 第十章 事务 本章内容 1、事务 2、事务控制语句 3、隔离级别 4、锁 1、事务 事务概念 事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。 因此事务是一个不可分割的工作逻辑单元。 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。 转账DEMO 无事务执行 从账号#1转出1000 写入数据库 存入1000到#2 写入数据库 事务性执行 从账号#1转出1000 存入1000到#2 写入数据库 事务属性(ACID) Atomic(原子性) 事务是一个完整的操作 Consistent(一致性) 当事务完成时,数据必须处于一致状态。 Isolated(隔离性) 对数据进行修改的所有并发事务是彼此隔离的。 Durable(永久性) 事务完成后,它对于系统的影响是永久性的。 2、事务控制语句 事务控制语句 START TRANSACTION 或 BEGIN COMMIT ROLLBACK SET AUTOCOMMIT 事务DEMO 自动提交(AUTOCOMMIT)模式 自动提交模式启用时单个SQL语句将开始一个新事务 与无事务处理的区别(单条SQL) 有事务时支持回滚 无事务时不会回滚 设置与查看自动提交模式 Set autocommit = off; Set session autocommit = off; Set @@autocommit := 0; Select @@autocommit; 显式提交 commit 隐式提交 Start transaction / begin Set autocommit :=1 数据定义语句(create、alter、drop) 数据访问和用户管理(grant 、 revoke 、 set password) 锁语句(lock tables 、unlock tables ) 查看存储引擎信息 Show engines 3、隔离级别 SQL 标准用三个必须在并行的事务之间避免的现象定义了四个级别的事务隔离。 脏读(dirty read) 一个事务读取了另一个未提交的并行事务写的数据。 不可重复读(non-repeatable read) 一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。 幻读(phantom read) 一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。 T1 T2 T1 T2 T1 T2 R(A)=16 A=A-1W(A)=15 A=A-1W(A)=15 R(A)=50 R(B)=100 求和=150 R(B)=100B=B*2W(B)=200 R(A)=50R(B)=200求和=250(前后不对) 丢失修改 不可重复读 不读“脏”数据 R(C)=100C=C*2W(C)=200 R(C)=200 ROLLBACKC 恢复为100 R(A)=16 隔离的四个级别 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据 可重复读(Repeated Read):可重复读,在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,和幻象读。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 对innodb不可能 数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使事务在一定程度上“串行化”进行,这显然与“并发”是矛盾的。同时,不同的应用对读一致性和事务隔离程度的要求也是
文档评论(0)