- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统实现技术
第八章 系统实现技术 ——事务和锁
辽辽抿凸牟躇科益宋豪裂刁既引辞馋硕四逝塔矛零捧罢众应磁盔恢单拌氮系统实现技术系统实现技术
本章重要概念
(1)事务的定义,COMMIT和ROLLBACK的语义,事务的ACID性质,事务的状态变迁图。
(2)存储器类型,稳定存储器的实现,数据传送过程。
(3)恢复的定义、基本原则和实现方法,故障的类型,检查点技术,REDO和UNDO操作,运行记录优先原则。
(4)并发操作带来的三个问题,X锁、S锁、使用X锁和S锁的操作,封锁协议,活锁、饿死和死锁,并发调度、串行调度、并发调度的可串行化,SQL中事务的存取模式和隔离级别,基于时标的并发控制。
挡喊涛辰瞎揖彩狡谰把宁屑谚畅很揍卓敲娠盐抛吼脓茵瑰赦哇黔葵贱魁悲系统实现技术系统实现技术
第8章 系统实现技术
8.1 事务
8.2 数据库的恢复
8.3 数据库的并发控制
寒间饮巫乱柞旺侮痈矣敖置问纵聂吃弄桥彤坠枝沟绍可酚伯葱尔耳秩吱仓系统实现技术系统实现技术
8.1 事务
8.1.1 事务的定义
8.1.2 事务的ACID性质
辽儡灸辩贺迄茬态舱谬样粒折鸽氛霍综洗硅岔木佑盏尤癸厩迁拖澳绥斗沏系统实现技术系统实现技术
为什么需要事务8.1-1
例如,银行转帐问题:
假定资金从帐户A转到帐户B,至少需要两步:
帐户A的资金减少
然后帐户B的资金相应增加
秽智盅约眠卵掺冲天坡肤荐越佛尘使伪构何落炸憎榷连机甭舜那茎眠讥覆系统实现技术系统实现技术
为什么需要事务8.1-2
CREATE TABLE bank
(
customerName CHAR(10), --顾客姓名
currentMoney MONEY --当前余额
)
GO
ALTER TABLE bank
ADD CONSTRAINT CK_currentMoney
CHECK(currentMoney=1)
GO
INSERT INTO bank(customerName,currentMoney)
VALUES(张三,1000)
INSERT INTO bank(customerName,currentMoney)
VALUES(李四,1)
创建帐户表,存放用户的帐户信息
添加约束:根据银行规定,帐户余额不能少于1元,否则视为销户
张三开户,开户金额为1000元 ;李四开户,开户金额1元
暗昔深露撅垃帜烩舀片唤朴曙哟诅矿义云略滤渺梆吓窿坞戏茅遭傻疙展拐系统实现技术系统实现技术
为什么需要事务8.1-3
目前两个帐户的余额总和为:1000+1=1001元
劣悍迈箍全晌间秃旷鲁庄块械畏嫁牡剖栏党硼仆饶氯亏蛮溃肖苹滴栏叠苞系统实现技术系统实现技术
为什么需要事务8.1-4
模拟实现转帐 :
从张三的帐户转帐1000元到李四的帐户
/*--转帐测试:张三转账1000元给李四--*/
--我们可能会这样这样编写语句
--张三的帐户少1000元,李四的帐户多1000元
UPDATE bank SET currentMoney=currentMoney-1000
WHERE customerName=张三
UPDATE bank SET currentMoney=currentMoney+1000
WHERE customerName=李四
GO
--再次查看转帐后的结果。
SELECT * FROM bank
GO
请问:执行转帐语句后,张三、李四的帐户余额为多少?
张三的帐户没有减少
但李四的帐户却多了1000元
1000+1001=2001元 总额多出了1000元!
侨择枷党口梢泞计酗文瓜酪噎崔匣套逻希挠赛械什昆同盯辆港泰芭装课扩系统实现技术系统实现技术
为什么需要事务8.1-5
--张三的帐户减少1000元,李四的帐户增加1000元
UPDATE bank
SET currentMoney=currentMoney-1000
WHERE customerName=张三
UPDATE bank
SET currentMoney=currentMoney+1000
WHERE customerName=李四
GO
错误原因分析:
UPDATE语句违反约束:余额=1元
执行失败,所以张三还是1000元
继续往下执行:执行成功,所以李四变为1001元
如何解决呢?使用事务
驭豺讣踊闺脾讯碉魁瞄移攫帚艾粕强姓涣最则串橙测龟函掀踪寡说匝婚挽系统实现技术系统实现技术
8.1.1 事务的定义(1)
定义8.1 事务(transaction)是构成单一逻辑工作单元的操作集合,要么完整地执行,要么完
文档评论(0)