第11章 程序1
编译原理第十一章解析

26
此处要用到的有向图,是一种其结点带有下述标记或附 加信息的DAG: ① 图的叶结点,即无后继的结点,以一标识符(变 量名)或常数作为标记,表示这个结点代表该变量或常数 的值。如果叶结点用来代表某变量A的地址,则用addr (A)作为这个结点的标记。通常把叶结点上作为标记的 标识符加上下标0,以表示它是该变量的初值。 ② 图的内部结点,即有后继的结点,以一运算符作为 标记,表示这个结点代表应用该运算符对其后继结点所代 表的值进行运算的结果。 ③ 图中各个结点上可能附加一个或多个标识符,表 示这些变量具有该结点所代表的值。
30
下面是仅含0,1,2型四元式的基本块的DAG构造算法。
首先,DAG为空。 对基本块的每一四元式,依次执行: 1. 如果NODE(B)无定义,则构造一标记为B的叶结点并定 义NODE(B)为这个结点; 如果当前四元式是0型,则记NODE(B)的值为n,转4。 如果当前四元式是1型,则转2.(1)。 如果当前四元式是2型,则:(Ⅰ)如果NODE(C)无定义, 则构造一标记为C的叶结点并定义NODE(C)为这个结点,(Ⅱ) 转2.(2)。 2. (1) 如果NODE(B)是标记为常数的叶结点,则转2.(3), 否则转3.(1)。 (2) 如果NODE(B)和NODE(C)都是标记为常数的叶结 点,则转2.(4),否则转3.(2 (3) 执行op B(即合并已知量),令得到的新常数为P。如 果NODE(B)是处理当前四元式时新构造出来的结点,则删除它。 如果NODE(P)无定义,则构造一用P做标记的叶结点n。置NODE (P)=n,转4.。 (4) 执行B op C(即合并已知量),令得到的新常数为P。如 果NODE(B)或NODE(C)是处理当前四元式时新构造出来的结 点,则删除它。如果NODE(P)无定义,则构造一用P做标记的叶 结点n。置NODE(P)=n,转4.。
第11章 项目整合管理1

第二节 制定项目管理计划
第二节 制定项目管理计划
开工会议( Kickoff Meeting )
又称启动大会、开工会议。每个项目都有启动大会,是项 目开始实施的动员大会。 召开时间:项目规划完成后、项目执行开始前召开; 参加方:项目各重要干系人(发起人、顾客、高层管理、职
能管理部门、卖方代表、项目团队等)。 作用:传达项目目标与项目管理计划,获得干系人对项目的
第十一章 项目整合管理
第一节 项目启动 第二节 制定项目管理计划 第三节 项目实施与综合变更控制 第四节 项目管理收尾
1
第十一章 项目整合管理
项目整合管理是指为确保项目各项工作能够有机地协调 和配合,所开展的综合性和全局性的项目管理工作和过程。 项目整合管理包括对隶属于项目管理过程组的各种过程和项 目管理活动进行识别、定义、组合、统一和协调的各个过程 。主要包括如下工作:
1.制定项目章程——项目启动 2.制定项目管理计划——项目计划开发过程 3.指导与管理项目实施——项目计划执行过程 4.管理项目知识——现有知识的使用并生成新知识 5.监控项目工作——项目工作的监控 6.实施综合变更控制——综合的变更控制 7.结束项目或阶段——项目收尾或阶段收尾
第十一章 项目整合管理
要干系人; (2)任务:审查、评价、批准、推迟或否决项目变更,记录和
传达变更处理请求; (3)设立原因:项目经理权力有限,对于涉及计划基准的变更
不能自做主张; PM 一个人决定不了的大事需要通过CCB 来做最终决策。
第三节 项目实施与综合变更控制
变更的批准权限:
每项记录在案的变更请求都必须由一位责任人批准或否 决。这个责任人通常是PM 或者发起人,在项目管理计划或 组织流程中会指定批准责任人。必要时由CCB 开展实施整 体变更控制过程。 1)PM:一般批准不涉及基准变更的请求,紧急情况可批准
C语言程序设计(姜学峰版)PPT课件第十一章

8
5)定义结构体类型仅仅声明了一种数据结构,编译 系统不会为类型分配存储空间的;此时可用已定 义的结构体类型去定义结构体变量或数组,编译 系统将为结构体变量分配存储空间;
9
2. 定义结构体类型的变量 有三种方法: 1)先定义结构体类型,再用类型标识去定义变量 struct student stu1, stu2; struct student是已定义的结构体类型标识符; stu1、stu2是所定义的结构体变量;编译时将为 结构体变量分配各自的存储空间; 2)定义类型的同时定义变量 struct student { …; …; } stu1, stu2;
18
5. 结构体变量的指针、结构体成员的指针 注:&优先级为2级,低于.和[ ]; stu1 变量stu1的指针:&stu1 图示: num
num成员指针:&stu1. num
4
20 1
name第i个元素指针:&stu1. name[i]
name sex m
┇
birthday d 最低级成员y的指针:&stu1.birthday.y y score
5
例:定义可表示学生基本情况的结构体类型。
项目: 学号 姓名 性别 出生日期 成绩 电话号码 数据: 010510 Li Feng M 1981.5.4 680 029-8482500
类型: 长整/字串 字串
字符
字串
整型
字串
struct student /*结构体类型标识*/ { long num; char name[20]; char sex; char birthday[12]; float score; char tel[15]; };
软件工程导论第11章

【还可以把适配接口再进一步细分为转换接口和扩充接口。转换接口, 是为了克服与表示方法、数据结构或硬件特点相关的操作给重用带来 的困难而设计的,这类接口是每个类构件在重用时都必须重新定义的 服务的集合。当使用C++语言编程时,应该在根类(或适当的基类)中, 把属于转换接口的服务定义为纯虚函数。如果某个服务有多种可能的 实现算法,则应该把它当作扩充接口。扩充接口与转换接口不同,并 不需要强迫用户在派生类中重新定义它们,相反,如果在派生类中没 有给出扩充接口的新算法,则将继承父类中的算法。当用C++语言实现 时,在基类中把这类服务定义为普通的虚函数。】
4. 弱耦合 耦合:指一个软件结构内不同模块之间互连的紧 密程度。 在面向对象方法中,对象是最基本的模块,因此, 耦合主要指不同对象之间相互关联的紧密程度。 弱耦合是优秀设计的一个重要标准。
5
对象之间的耦合分为两大类: (1) 交互耦合: 对象之间的耦合通过消息连接来实现。 使交互耦合尽可能松散,应遵守下述准则: 尽量降低消息连接的复杂程度。 应该尽量减少消息中包含的参数个数,降低参数的复 杂程度。 减少对象发送(或接收)的消息数。 (2) 继承耦合 与交互耦合相反,应该提高继承耦合程度。 通过继承关系结合起来的基类和派生类,构成系统中 粒度更大的模块。设计时应该使特殊类尽量多继承并 使用其一般化类的属性和服务,从而更紧密地耦合到 其一般化类。
13
2. 软件成分的重用级别 (1) 代码重用 源代码剪贴:最原始的重用形式。 复制或修改原有代码时可能出错,存在严重的配臵 管理问题,人们几乎无法跟踪原始代码块多次修改 重用的过程。 源代码包含:许多程序设计语言都提供包含库中 源代码的机制。配臵管理问题有所缓解,修改了库 中源代码之后,所有包含它的程序自然都必须重新 编译。 继承:利用继承机制重用类库中的类时,无须修 改已有的代码,就可以扩充或具体化在库中找出的 类,基本上不存在配臵管理问题。
第11章:股利分配

第11章股利分配主讲:张长江副教授、博士第一节利润分配概述自由现金流量保留支出投资于新项目增加现金储备回购股票支付股利一、利润分配的项目分配项目提取比例说明法定公积金弥补亏损后税后利润的10%当公积金累计额达到公司注册资本的50%时,可不再提取。
主要用于弥补公司亏损,扩大公司生产经营规模或转增公司资本。
任意盈余公积金由股东会决定股利原则上应从累计盈利中分派,无盈利不得支付股利。
若公司用公积金抵补亏损以后,通过股东大会特别决议,也可用公积金支付股利。
二、利润分配的顺序(1)计算可供分配的利润可供分配的利润=本年净利润+年初未分配利润如果为负数,不能进行后续分配。
如果为正数,进行后续分配。
(2)计提法定公积金按照抵减年初累计亏损后的本年净利润计提(这种补亏,是按照账面数字进行的,与所得税法的亏损后转无关,关键在于不能用资本发放股利,也不能在没有累计盈余的情况下计提公积金)。
如果本年净利润大于0:年初存在累计亏损:法定公积金=可供分配利润×10%年初不存在累计亏损:法定公积金=本年净利润×10%【思考】假设年初未分配利润+100万,本年净利润-50万,可供分配的利润=+50万,可以进行后续分配。
在这种情况下公司是否需要计提法定公积金?不提法定公积金,因为法定公积金是基于当年有利润的情况下才提。
注意尽管不提法定公积金,但可以向股东分配利润。
(3)计提任意公积金由股东会决定(4)向股东支付股利(向投资者分配利润)可供股东分配的利润=可供分配的利润-从本年净利润中提取的公积金。
第二节股利支付的程序和方式☐股利支付的程序股利支付过程中的重要日期股利宣告日✓即公司董事会将股东大会通过本年度利润分配方案的情况以及股利支付情况予以公告的日期。
股权登记日✓有权领取本期股利的股东资格登记截止日期。
凡是在股权登记日这一天登记在册的股东(即在此日及之前持有或买入股票的股东)才有资格领取本期股利。
除息日(除权日)✓也称除权日,是指股利所有权与股票本身分离的日期,即将股票中含有的股利分配权利予以解除,即在除息日当日及以后买入的股票不再享有本次股利分配的权利。
第11章-作业及习题参考答案

第11章(8分)将下面程序划分为基本块,并画出其基本块程序流图。
(1) if a<b goto (3)(2) halt(3) if c<d goto (5)(4) goto (8)(5) t1:=y+z(6) x :=t1(7) goto (1)(8) t2:=y-z(9) x :=t2(10) goto (1)11.1答:所谓代码优化即对代码进行等价变换,使得变换后的代码与变换前代码运行结果相同,而运行速度加快或占用存储空间少,或两者兼有。
进行优化的基础是中间或目标代码生成,以及基本块的识别、控制流分析和数据流分析。
2答:根据不同的阶段,分为中间代码优化和目标代码的优化。
根据优化所涉及的程序范围,又可分为局部优化、循环优化和全局优化。
3答:最常用的代码优化技术有:(1)删除多余运算(2)代码外提(3)强度削弱(4)变换循环控制条件(5)合并已知量和复写传播(6)删除无用赋值4 图11.23是图11.22的C代码的部分四元式代码序列(1) 请将图11.23的四元式代码序列划分为基本块并做出其流图?(2) 将每个基本块的公共子表达式删除?(3) 找出流图中的循环,将循环不变量计算移出循环外?(4) 找出每个循环中的归纳变量,并且在可能的地方删除它们图11.22void quicksort(m,n)int m,n;1 / 10{ int i,j;int v,x; if (n<=m) return;/* fragment begins here */ i = m-1;j = n;v = a[n];while(1) {do i = i+1;while (a[i]<v);do j = j-1; while (a[j]>v);if (i>=j) break;x = a[i];a[i] = a[j];a[j] = x;}x = a[i];a[i] = a[n];a[n] = x;/* fragment ends here */ quicksort (m,j);quicksort(i+1,n);}图11.23(1) i:=m-1(2)j:=n(3) t1:=4*n(4) v:=a[t1](5) i:=i+1(6) t2:=4*i(7) t3:=a[t2](8) if t3< v goto (5)(9) j:=j-1(10)t4:=4*j(11)t5:=a[t4](12)if t5> v goto (9)(13)if i >= j goto (23)(14)t6:=4*i(15)x:=a[t6] (16) t7:=4*i(17) t8:=4*j(18) t9:=a[t8](19) a[t7]:=t9(20) t10:=4*j(21) a[t10]:=x(22) goto (5)(23) t11:=4*i(24) x:=a[t11](25) t12:=4*i(26) t13:=4*n(27) t14:=a[t13](28) a[t12]:=t14(29) t15:=4*n(30) a[t15]:=x答:(1)1-4为第1块,5-8为第2块,9-12为第3块,13句为第4块,14-22为第5块,23-30句为第6块。
第11章 Windows 编程初步-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社
❖ 第一种方法的特点是可以使应用程序更精炼,运 行效率更高,编写程序时有较大的自由度,但难 度较大;
❖ 第二种方法的特点是采用MFC提供的类库编写程 序,这些类中已经封装了大部分的Windows API 函数,还提供了编写不同程序类型的模版和框架, 所以编写程序比较容易,而且还允许直接调用 Windows API 函数来实现一些特殊的功能。
第三部分 Visual C++环境下Windows程序 开发概述
第11章 Windows 编程初步 第12章 MFC库和应用程序框架 第13章 综合设计实例– 简单绘图程序
第11章 Windows 编程初步
本章要点:
❖简单的Windows程序框架 ❖自定义类和Windows程序框架结合
在编写Windows 应用程序时,常采用两种方法: ❖ 一是使用Windows SDK ( Software development Kit,即
图11.5 向解决方案中添加新项
图11.6 添加main.cpp文件
(6)可以看到在“解决方案管理器”视图中的“源文件” 栏目中被添加了一个main.cpp文件,同时可以看到 Visual Studio开发工具的中间编辑窗口也打开了一个空 白的文件编辑窗口,在这里输入例11.1的源程序,然后保 存,如图11.7所示。
❖ Windows程序一般是一个可视化的窗口程序,通过操作 系统发送的消息来处理用户输入的数据,然后通过在窗口 上绘制或者把数据发给窗口上的组件来显示数据。
❖ 句柄就是一个标识符,用来区别同类对象或者资源的唯一 标志,可以认为它是个无符号整数或者一个指针均可。
MapInfo教程第11章
Type
指定Annotation对象类型。
Graphic
包含了拥有Annotation属性 的Graphic对象。请参阅联 机帮助中的Graphic对象描 述。
6. 可创建对象 在MapX对象模型中,以下对象是可以被创建、 的: AffineTransform、BindLayer、BitmapSymboInfo、 Map、ODBCQueryInfo、Parts、Point、Points、 Rectangle、RowValue、RowValues、Style、 Variables、NotesQueryInfo、NotesViewInfo。
图11-4 “欢迎”对话框
图11-5 “软件许可”对话框
图11-6 “选择目标位置”对话框
图11-7 “组件”对话框
⑥ 出现“组件”对话框,如图11-7所 示。 指定要安装的产品组件。此时将显示所选 组件的磁盘空间要求。 ⑦ 此时将显示“选择程序文件夹”对 话 框,如图11-8所示。指定程序文件夹。 ⑧ 此时将显示“开始复制文件”对话 框, 如图11-9所示。
3. 向VB中添加工作地图
① 从Visual Basic工具箱选择地图控件。 ② 在表单上绘制图框,表示要显示地 图的区域。MapX显示地图的预览。 ③ 右键单击地图控件,然后从快捷方 式菜单中选择“特性”。此时将出现 MapInfo MapX“属性页”对话框,如图11-18所示。
图11-18 “属性页”对话框
11.5.1 Geodictionary Manager
在MapX GeoSet Manager的工具菜单下有执行 GeoDictionary程序的选项。弹出“GeoDictionary Manager” 对话框,如图11-12所示。GeoDictionary Manage程序允许 把新的MapInfo表注册到GeoDictionary中。同时,在 “GeoDictionary Manager”中,单击“注册表(Register)” 按 钮,弹出“表属性(Table Properties)”对话框,如图1113 所示。然后选择要注册的表,设置表属性并为其输入描 述。如果要想自动地把这张表加载到 GeoSet中,请单击 添加按钮然后选择要把表添加进的GeoSet。
第11章---点焊机器人编程及分析
11.2 点焊机器人组成
2.点焊钳分类 根据焊钳加压的驱动方式分为气动焊钳和伺服焊钳
图 11-12 气动焊钳
图 11-13 伺服焊钳
11.2 点焊机器人组成
2.点焊钳分类 按焊钳的结构型式分为C型焊钳和X型焊钳。
图 11-14 C型焊钳
图 11-15 X型焊钳
11.2 点焊机器人组成
2.点焊钳分类 按焊钳加压力大小,可分为轻型焊钳和重型焊钳。如图11-16和图11-17所示
图 11-3 点焊初始设置
11.1 点焊机器人基础
3.机器人点焊指令(以FANUC工业机器人伺服焊枪点焊作业为例)
3)点焊I/O信号配置: 单元接口I/O信号:输入信号配置焊接有效/无效、加压有效/无效、冷却机复位、
自POUNCE返回原点位置、试验方式。(信号分配完成后须重启机器才生效) 点焊设备I/O信号:常用的有冷却机正常、水流量正常、焊接变压器正常等输入信
号,复位冷却机、焊枪压力通知信号等输出信号。 点焊机I/O信号:利用点焊机I/O信号,使用数字量输入/输出来实现机器人与焊机
之间通信。
图 11-3 点焊初始设置
11.1 点焊机器人基础
4.机器人点焊指令功能(以FANUC工业机器人伺服焊枪点焊作业为例)
指令
说明
点焊指令
点焊指令是在程序中指定伺服枪操作的指令。指定点焊指令的一连串处理(加压、 焊接、打开)叫做“点焊顺序”。
4.机器人点焊指令功能(以FANUC工业机器人伺服焊枪点焊作业为例)
点焊指令条件设定: 开始位置电极头距离(SD):指定进行用于焊接的焊枪关闭时伺服焊枪的电极 头间距离。 加压条件(P):按所指定的加压条件进行加压。如图11-5所示。
图11-5加压条件设置页面
第11章园艺植物新品种审定推广及良种繁育
(五)品种定名和登记
1、新品种定名: 选育单位或个人建议,品种审定委员
会审议。 国内外引进品种一般采用原名或统一
译名。
2、新品种登记: 全国农作物品种审定委员会审定的新品
种,由农业部统一编号、登记并正式公布。 各省、市、自治区审定的新品种,由省、
市、自治区农业厅(局)统一编号、登记、 公布,并报全国农作物品种审定委员会备案。
(3)包装、贮藏和种子时,容器内外均应附 上标签,注明品种名称,种子等级、数量和 纯度。 (4)留种地品种的田间布置要适当。留种地 与其它作物或品种保持一定距离,尽可能轮 作。
2.隔离留种,防止天然杂交。 对易于相互杂交的变种、品种或类型进行隔离。
(1)机械隔离。 繁殖少量原种或原始材料保存。
套袋、罩网、温室隔离。
2、品种权的申请、受理与审查批准 申请与受理:申请费(1月内) 审查与批准:6个月内初审公示,之后3 月内交审查费。实质审查。
3、授权品种的权益和归属
4、品种权的保护期限和侵权处罚 藤本、木本、果树和观赏树木:20年; 其他植物:15年。
五、品种推广 (一)新品种推广准则 审定合格方可推广; 适地适种; 遵循良种繁育制度; 配套栽培技术,良种良法。
(二)推广的方式方法 大众媒介 农业行政部门 育种者
第二节 良种繁育
学习要点: 品种退化原因及防治措施 良种繁育制度
一、良种繁育的任务 1、迅速大量繁殖良种(数量) 2、防止品种退化劣变(质量)
二、品种退化现象 (一)品种退化 品种在繁殖过程中由于种种原因会逐渐
丧失其优良特性,失去原品种的典型性(产 量、品质、整齐度等)
2、品种审定的依据是品种试验。
3、品种审定是良种繁育和推广的前提
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BEGIN TRANSACTION my_transaction
UPDATE [Products] SET UnitPrice=2*UnitPrice WHERE ProductID=40
SAVE TRANSACTION my_savepoint
UPDATE [Order Details] SET UnitPrice=2*UnitPrice WHERE ProductID=40
第十一章
SQL Server中的程序设计
1
本次课主要内容 第十一章 SQL Server中的程序设计 • 11.1 批处理的基本概念 • 11.2 事务处理 • 11.3 SQL Server的流程控制语句
2
11.1.1 基本概念
批处理
包含一个或 多个T-SQL 语句的组
这些语句被应 用程序一次性 地发送到 SQL Server 执行
12
例:创建一个在COMMIT TRANSACTION 语句之前带有ROLLBACK TRANSACTION 子句的事务my_transaction。该 子句将撤销从SAVE TRANSACTION my_savepoint到ROLLBACK TRANSACTION my_savepoint之间 的语句对数据库所作的任何修改
18
更新锁:用于可更新的资源中, 以防当多个会话在读取、锁定 及资源更新时可能发生的死锁
意向锁:常用于建立锁的层次结构, 主要类型有意向共享、意向排它和 与意向排它共享
19
模式锁:常在执行依赖于表架 构的操作时使用
批量更新锁:向表中大容量复 制数据并指定了TABLOCK提示 时使用
20
例:使SQL Server为事务SELECT count(*) from Products保持共 享锁直到该事务完成,该选项 不确定共享锁是表锁或页锁
CREATE proc my_proc @input_year int
AS IF (@input_year<=2000) RETURN 1 ELSE RETURN 2
37
若要取得存储过程的返回值,可以 通过EXEC @return_status=过程名, 如获得存储过程my_proc的返回值, 命令如下:
22
PAGLOCK:在通常使用单个表锁的 地方采用页锁
TABLOCK:使用表锁代替行级锁或 页级锁,若同时指定 HOLDLOCK, 则在事务结束之前,锁将一直保持 TABLOCKX:使用表的排它锁,该 锁可防止其它事务读取或更新表, 并在语句或事务结束前一直保持
23
UPDLOCK:读取表时使用更新锁,而 不使用共享锁,并将锁一直保留到 语句或事务的结束。UPDLOCK 的优 点是允许用户读取数据并在以后更 新数据,同时确保自从上次读取数 据后数据没有被更改 XLOCK:使用排它锁并一直保持到由 语句处理的所有数据上的事务结束
27
常用的流程控制语言
DECLARE RAISERROR CASE BEGIN … END BREAK RETURN PRINT WHILE IF … ELSE CONTINUE
28
11.3.1 声明变量
用DECLARE可以声明变量 用SELECT语句可以给变量赋值
DECLARE @variable_name datatype [,@variable_name datatype…] SELECT @variable_name value [,@variable_name value…]
EXEC sp_monitor go
34
35
11.3.3 RETURN 语句
RETURN语 句实现从一个 查询或过程中 无条件退出 向调用它的过 程或应用程序 返回一个整数
-1~-99:代表不同的出错原因 0:成功返回; -1:对象丢失 -2:发生数据类型错误
36
例:创建了一个用户存储过程,根 据输入的参数值返回不同的用户自 定义的返回值
系统将批处理语句作为整体编译 成一个可执行单元,即执行计划
3
11.1.2指定批处理的方法
(1)应用程序作为一个执行单元发 出的所有SQL语句构成一个批处理, 并生成单个执行计划 (2)存储过程或触发器内的所有语 句构成一个批处理。每个存储过程 或触发器都编译为一个执行计划 (3)由EXECUTE语句执行的字符 串
25
本次课主要内容 第十一章 SQL Server中的程序设计 • 11.1 批处理的基本概念 • 11.2 事务处理 • 11.3 SQL Server的流程控制语句
26
11.3 SQL Server的流程控制语句
可用于单个的SQL语 句、语句块和存储过 程的执行
通过流程控制语句以控 制程序的流程,允许语 句彼此相关及相互依赖
例:用一个变量存放表名,并将该变 量传递给sp_spaceused系统存储过程, 以查询表空间的使用情况。
DECLARE @next char(30) SELECT @next=' ' WHILE @next is not null BEGIN SELECT @next=min(name) FROM sysobjects WHERE type='U' AND name>@next EXEC sp_spaceused @next END 从sysobjects中提取表名,按升序 Go 将各表名赋给变量@next
DECLARE @return_status int
EXEC @return_status=my_proc 1996
If @return_status=1
Print ‘The input year is before 2000’
If @return_status=2 Print ‘The input year is after 2000’
4
本次课主要内容 第十一章 SQL Server中的程序设计 • 11.1 批处理的基本概念 • 11.2 事务处理 • 11.3 SQL Server的流程控制语句
5
11.2 事务处理
SQL Server 把单个工 作单元定 义为事务 任何单个SQL语 句都可看成一个 单个的工作单元, 在SQL Server中, 事务处理可以通 过一段SQL程序 来完成
6
11.2.1 事务概述
DELETE FROM department WHERE department_id=‘D004’
DELETE FROM employee WHERE department_id=‘D004’
7
事务处理语句包含在如下两行 语句当中
BEGIN TRANSACTION [transaction_name] …… Save TRANSACTION [transaction_name] …… COMMIT TRANSACTION [transaction_name] Rollback TRANSACTION transaction_name]
SELECT count(*) from Products(tablock holdlock)
21
关于表的锁定选项: HOLDLOCK:将共享锁保留到事 务完成,而不是在相应的表、行或 数据页不再需要时就立即释放锁
NOLOCK:不发出共享锁,不提 供排它锁。利用此选项可能会读取 未提交的事务或一组在读取中回滚 的页面,它仅应用于S/修改 的表上, 从而防止 多个事务 并发使用 资源造成 问题
15
将锁最小化(如完成事务后, 立即提交)可以提高并发性和 提高数据库的性能
16
读操作需要的共享锁 基本锁 写操作需要的独占锁
锁
更新锁 意向锁 专用锁 模式锁 批量更新锁
17
共享锁:常用于只读操作, 如SELECT语句 专用锁:确保不会同时对 同一资源进行多重更新, 常用于对数据修改操作如 INSERT、UPDATE或 DELETE
10
例:通过事务来保证Northwind库 中表Products和表Order Details 上的所有ProdcutID为40的产品其 单价翻番
BEGIN TRANSACTION my_transaction --开始一个事务 UPDATE [Products] --更新Products表 SET UnitPrice=2*UnitPrice WHERE ProductID = 40
32
11.3.2 预声明的全局变量
许多预声明的全局变量用 来报告最近一次SQL Server启 动以来的系统活动情况以及连 接信息 预声明的全局变量的特征 是有两个@@放在变量名前
33
例:执行sp_monitor系统存储 过程来获预声明的全局变量 的信息, 以显示有关SQL Server 繁忙程度
11
SAVE TRANSACTION my_savepoint --保存能回滚的点 UPDATE [Order Details] --更新Order Details表 SET UnitPrice = 2*UnitPrice WHERE ProductID = 40
COMMIT TRANSACTION
24
事务隔离级别允许用户为整个SQL Server设置会话级独立级别,可用 SETTRANSACTION ISOLATION LEVEL语句 来设置该级别,当用户设置独立级别 时,用户是为SQL Server会话中所有 的SELECT语句设置了缺省锁行为。在 指定了独立级别后,可以在单个的 SELECT语句中与它一起使用锁指定而 重载它。另外,可以用DBCC USEROPTIONS来查看了什么级别设置
38
11.3.4 CASE表达式
CASE用于计算多个条件并为每 个条件返回单个值 CASE函数的用法:
CASE expression WHEN expression1 THEN expression1 [ELSE expressionN] END