a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 114|回复: 1

[计算机四级] 计算机四级考试数据库重难点汇总(8)

[复制链接]
发表于 2012-7-31 20:48:14 | 显示全部楼层 |阅读模式
第13章 数据库对象
4 L- a0 |' ]% i' L& z2 x4 }' b! ?13.1 存储过程的:SQL语句和控制流语句的预编译集合,应用程序可通过调用方法来执行- `8 |! M: d4 @8 c! w6 B& e2 {* m
优点:模块化程序设计;提高性能;减少网络流量;可作为安全机制使用- Z2 @' i+ ~+ J! H9 p  k1 X# Y
13.2 带有多个参数并有默认值及输出参数的存储过程示例:! f5 V; b) `4 q8 K" M+ a, E. f
CREATE PROCEDURE p_Example% L% a2 `0 o+ S) M8 z" u
@area varchar(20) = ‘武汉大学’,@Price money,@Sum int output
& G) s2 h( C( {/ Q' i0 H7 NAS
% {4 P* D2 p5 Y) hSELECT/UPDATE/INSERT/DELETE……6 s& T( d4 l& U- k9 m/ H; ~
SET @Sum = …。.3 _/ q4 a1 _- F5 ~/ |
应用程序中执行的SQL语句:
  `* P# s  k  k. |7 j7 }Declare @res int6 u7 A% m/ L3 ?* W; V
EXECUTE p_Example ‘武汉大学信息学部’,1000,@res output
; k/ M) w6 l6 V  Z9 b( d或者 EXECUTE p_Example @Price =1000,@res output
+ g# T7 ?+ m/ i13.3 用户自定义函数:标量函数(返回单值,非text、Image类型,任何允许出现表达式的地方)、内嵌表值函数(返回一个表,放在查询语句的From子句中)、多语句表值函数(返回一个可自定义的表,也放在查询语句的From子句中,视图和存储过程的结合)
, _+ \, `0 I9 h; x" y7 t4 E13.4 标量函数救示例:根据指定的商品类别查询该类的商品个数。9 s- X7 L8 n9 h- y" X
CREAT FUNCTION dbo.f_GoodsCount(@class varchar(10))
. n9 v( r0 ~, {: t* W9 p* i) yRETURNS int
6 \9 G2 }& L) a4 mAS- r, A5 W$ b% W( k/ j
BEGIN
' x1 k0 ?8 M9 L1 z2 KDECLARE @x int
" F8 d6 Y3 S7 |/ V7 q  ]1 ESELECT @x=count(*) From T_GoodsClass a JION T_Goods b* q1 f+ l# i4 e  m) M- `( |3 U  J
ON a.GoodClassID = b.GoodClassID# ]3 x* I# h% h, r
WHERE GoodClassName = @class
) y8 r" ^. h; g; }RETURN @x
+ ^7 ?- B1 f: J2 A3 H$ hEND
5 o8 k! L- F7 I' W调用:SELECT dbo.f_GoodsCount(‘服装’) 或者4 ]: h  n: J- i7 i9 Z! U
SELECT GoodsName AS 商品名,dbo.f_GoodsCount(‘服装’) AS 种类数 From …。
; t# k2 k  \3 m13.5 内嵌表值函数的不同之处在于RETURNS 后只能是table,RETURN后面只能是单个的 SELECT语句,没有相关联的返回变量也没有函数体。调用时放在查询语句的FROM子句中。
7 J5 ^2 c6 W- b6 E4 \! ], W5 V13.6 触发器是一种不需要由用户来调用的存储过程,当用户对表进行UPDATE、INSERT或DELETE操作时自动触发执行。作用:保证业务规则和数据完整性。优点:用编程方法来实现复杂的处理逻辑和业务规则,增强数据完整性约束。. C, L2 x  l2 S5 h7 ]
13.7 触发器适用场合:比CHECK语句更复杂的数据约束(可引用其他表中的列);为保证数据库性能而维护的非规范化数据(如增加统计总值的列);实现复杂的业务规则. f# @  j( @/ |6 P
13.8 AFTER/FOR:后触发型触发器,可在同一操作上建立多个;INSTEAD OF:前触发型,在同一操作上只能建立一个。所有的涉及对数据库对象操作的语句均不允许出现在触发器中。
回复

使用道具 举报

 楼主| 发表于 2012-7-31 20:48:15 | 显示全部楼层

计算机四级考试数据库重难点汇总(8)

13.9 DELETED表:存储UPDATE和DELETED操作语句所影响行的更新前的旧数据;
: j1 R0 W; [. @* \! G" mINSERTED表:存储UPDATE和INSERT操作语句所影响行的更新后的新数据。$ w) J' T* P2 y& D4 U
13.10 维护数据操作完整性的后触发器示例:销售量大于库存量则撤销当前销售,小于时则在插入销售单据明细时同时修改库存量。
( ~7 m( z! G1 ~* [4 w2 SCreate Trigger OperatonCon0 h* e; I& ]1 M. _
ON T_SaleDetail FOR INSERT
0 J+ U8 d/ @2 q9 g  G7 pAS
0 M5 k- O& S7 N7 c/ U$ `+ ]/ MIF EXISTS(Select * From inserted a Jion T_Goods b1 }5 }, G8 S( d9 q8 R
ON a.GoodsID = b.GoodsID WHERE a.Quanity 》 b.TotalCharge)
9 d( f" ^/ [. e4 l+ ]4 O( Q' j; VBEGIN
# A9 \7 X" ^& v9 LROLLBACK% }, a& j: F$ ^8 }! p
PRINT ‘此商品库存量小于此次销售数量’" d# D* d9 T$ a2 ]6 F( O
END
2 A9 d" p) t7 f6 `6 xELSE
6 \0 G- a$ X1 u9 K0 V3 `UPDATE T_Goods SET TotalCharge = TotalCharge –  P) e3 I; _0 }; ?
(SELECT Quanity From inserted)
  \7 l' Q) w) K4 v. H13.11 维护不同列之间取值完整性的后触发器示例:保证商品表中的单价与价格变动表中一致. v7 j0 B7 x0 ^* v; I
CREATE TRIGGER PriceConstraint
4 d. s" Q/ x0 l( M* aON T_PriceHistory FOR INSERT, UPDATE) o5 C3 Q; a  w9 i. S  B
AS
5 H; j. M! ?' D- C' U$ f' }DECLARE @newprice money
- d  W; A8 @+ l5 n/ H9 w6 E2 FSELECT @newprice = SalePrice From inserted% o5 S) ]2 ?& H4 y6 a- s
UPDATE T_Goods SET SaleUnitPrice = @newprice# b" K5 L$ m& N6 n
WHERE GoodsID IN (SELECT GoodID From inserted )+ P4 K$ F: L* b
13.12 前触发器指定执行触发器而不执行引发触发器的SQL语句,因此,如果数据操作满足完整性约束则在触发器中必须重新执行这些数据操作语句。9 C0 `/ O+ _* ?
前触发器示例:保证销售单据中的会员卡是有效日期内的会员卡:/ p' ?, y0 s; P6 |
CREATE TRIGGER CardValid4 t# f& Q: |+ ~1 X5 n
ON T_SaleDetail INSTEAD OF INSERT, UPDATE
( @+ ~$ U# m0 }9 h( X$ uAS
5 ~& e: H. [: ^IF NOT EXISTS (SElETCT * From inserted a JOIN T_Card b ON a.CardID=b.CardID
4 V0 O/ _8 p" _4 }$ Y9 V+ [. j: x3 fWHERE a.SalDate NOT BETWEEN b.StartDate AND b.EndDate)" F2 ?7 u* W+ I9 |& P3 r0 [  O/ |
INSERT INTO T_SaleDetail SELECT * From inserted (若满足条件此语句重新执行)
- ~0 ~7 r- s) J9 d13.13 用SQL语句修改存储过程、用户自定义函数、触发器的语法与创建基本一致,只是将CREATE改为了ALTER。(查询分析器中实现)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-16 14:00 , Processed in 0.153852 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表