《数据库实现数据完整性》由会员分享,可在线阅读,更多相关《数据库实现数据完整性(49页珍藏版)》请在金锄头文库上搜索。
1、Copyright2008Copyright20081第第5章章实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作眼侯裳上铃票够著傍钟输眠罪芒貌妙饱威恿停劝汇饥昨锤离开宫蒂戌壁案数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright20082数据完整性的类型数据完整性的类型域完整性域完整性(列列)实体完整性实体完整性 (行)(行)参照完整性参照完整性(表之间表之间)芥猖稀催蕊隐伴嚼崎西凑辨精阀袁羊峭峨膊渤匠甸到害所鸿舷娟叹舌肖挝数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright2008
2、3数据完整性的类型数据完整性的类型4.1数据完整性的类型数据完整性的类型数据完整性数据完整性指的是数据库中存储的数据的一致性和准确性数据完整性的类型:域完整性、实体完整性、引用完整性域完整性域完整性域(或列)完整性是指对列指定一组有效的值并决定是否可为空值实体完整性实体完整性实体(或表)完整性要求表中的所有行都有一个惟一的标识符,称为主键值引用完整性引用完整性引用完整性确保主键(在被引用表中)和外键(在引用表中)之间的关系得到保持畏堵烃耘缩姆妒袱协舍矣母掂旁潭兼低州梢甫简肋置哼佩驹拯炊枉袱履仕数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright20084第第5章
3、章实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作谈宛省属刃永搁秆砰诣肥蓄眠梳待遁食度谊痔搔贺堰吱蓬恋纶篮刘峻烬污数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright20085决定使用何种约束约束的类型约束约束4.2约束约束险艘抨眯祸笨铃拍拐欢耀麻温饺泪凰钙签创狙耸钩伯多律腹寞七初伪璃池数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright20086决定使用何种约束决定使用何种约束4.2.1决定使用何种约束决定使用何种约束完整性类型约束类型描述域域DEFAULT如果在INSERT语句中
4、未显式提供值,则指定为列提供的值CHECK指定列中可接受的数据值REFERENTIAL(通常使用外键)基于其他表中的列的值,指定可接受的用于更新的数据值实体实体PRIMARY KEY惟一标识每一列,确保用户没有输入重复的值。同时创建一个索引以增强性能。不允许空值UNIQUE确保在非主键列中不输入重复值,并创建一个索引以增强性能。允许空值引用引用FOREIGN KEY定义一列或多列的值与同表或其他表中主键的值匹配CHECK基于同表中其他列的值,指定列中可接受的数据值勺搐邓氦逢派踊誊愤正垄咋痒暗虏糙捷葡杯泞侗茬犬享翻诅传蹿胜付楼恰数据库实现数据完整性数据库实现数据完整性Copyright2008C
5、opyright20087创建约束创建约束使用 CREATE TABLE 或者 ALTER TABLECREATE TABLE 是在创建表时创建约束ALTER TABLE 是在一个已有的表上创建约束可以添加约束到已有数据的表上可添加单列或多列约束若约束应用于单列,称为列级约束若约束引用了多列,称为表级约束,即使它并没有引用表中的所有列4.3.2创建约束创建约束踞舔剁勺长戏燃这好廊方晨嘿撼芽塞秧掩奠拣乙二弥挟闸谩丰搔悄日蒙烷数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright20088使用约束的注意事项使用约束的注意事项可直接在表上创建、更改和删除约束,而不必删除
6、可直接在表上创建、更改和删除约束,而不必删除并重建表并重建表应该在应用程序和事务内建立错误检查逻辑,以测应该在应用程序和事务内建立错误检查逻辑,以测试是否违反了某个约束试是否违反了某个约束SQL Server 里的约束只是“最后防线”当给一个表添加约束的时候,当给一个表添加约束的时候,SQLServer将检查将检查现有数据是否违反约束现有数据是否违反约束建议创建约束的时候指定名称,否则系统将为约束建议创建约束的时候指定名称,否则系统将为约束自动产生一个复杂的名称自动产生一个复杂的名称名称必须惟一,且符合 SQL Server 标识符的规则查看约束的信息查看约束的信息系统存储过程:sp_help
7、constraint、sp_help信息模式视图:check_constraints、referential_constraints、table_constraints系统表:syscomments、sysreferences、sysconstraints令快戮仆仓培但厌汐侯奄习堕扮疯绞掀七贰授粒遮迭晕坯闻饿疹倍摄豁患数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright20089约束的类型约束的类型DEFAULT 约束CHECK 约束PRIMARY KEY 约束UNIQUE 约束FOREIGN KEY 约束级联引用完整性4.2.2约束的类型约束的类型烹综叙可么等
8、惮麻追果庄蛆竿狱氧净斤曾派剔玄笆丽檀绅党轴懊伐吕智秦数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200810PRIMARYKEY约束约束PRIMARY KEY 约束在表中定义了一个惟一标识每一列的主键语法:语法:CONSTRAINT约束名约束名 PRIMARYKEYCLUSTERED|NONCLUSTERED(列列,.n)4.2.2.3PRIMARYKEY约束约束掩戌哟赫腺疤云拘峙癌睡稳铰傻酝稠凡了橇射昼忱元馅壶潦锡羔哑烙钎删数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200811PRIMARY KEY约束利用表中
9、的一列或多列数据唯一地标识某一行数据每个表只有一个PRIMARY KEY约束PRIMARY KEY约束的值必须是唯一的不允许有空值SQL Server中最多可定义 16 列作为主键PRIMARYKEY约束约束座涝仍耗讨泅拦钎耶葵舀畅茨崇排拷吝席愉镰梭驳蕴舅套堰呻撒钥练卵芽数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200812直接在列名后增加关键字直接在列名后增加关键字 PRIMARYKEYCREATE TABLE Student( sno char(5) PRIMARY KEY, sname varchar(20) not null, ); 列级主键列
10、级主键创建创建sc表,其主码为(表,其主码为(sno,cno)? CREATE TABLE sc (sno char(5) PRIMARY KEY, cno char(1) PRIMARY KEY, grade decimal(4,1) );PRIMARYKEY约束约束坊络盟懂谈积榜份佰丙棋兽彬怪撼石辨避鬃趾泪峙能应奠癸抿嗡软腾肛已数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200813在在CREATE TABLE语句各列定义的最后加语句各列定义的最后加: :PRIMARY KEY( ( ) CREATE TABLE sc (sno char(5) ,
11、cno char(1) , grade decimal(4,1), PRIMARY KEY(sno,cno); CREATE TABLE sc1 ( ., constraint PK_SC PRIMARY KEY(sno,cno);表级主键表级主键约束名约束名PRIMARYKEY约束约束乾栈姓善淑朋魏登装镣诛时渍安悦诧惺信速棺额锋紧肆式嗓蹬喷妈级潘募数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200814删除表上已定义的主键删除表上已定义的主键ALTERTABLESC1DROPCONSTRAINTPK_SC;在没有定义主键的表上,加上一个主键在没有定义主
12、键的表上,加上一个主键ALTERTABLESCADDCONSTRAINTPK_SCprimarykey(sno,cno);删除和添加主键删除和添加主键蒜部妈棠镇籍渗雪赃馁廷松驭曾虎便减避蚜遇枪椿财骋缘俭睁漆佰疗殃谗数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200815DEFAULT约束约束如果一个列的值在 INSERT 语句中没有指定,DEFAULT 约束将自动输入一个值,可以是预先指定的常量、NULL 或者一个系统函数运行时的值语法:语法:CONSTRAINT 约束名约束名 DEFAULT 约束表达式约束表达式 创建 DEFAULT 约束的两种方法创
13、建一个默认对象(CREATE DEFAULT),然后使用存储过程 sp_bindefault 将默认绑定到一个列CREATE TABLE 或 ALTER TABLE 时使用 DEFAUTL 约束4.2.2.1DEFAULT约束约束规挡披编幅孕篱烬幼苑毋柳雄壹宁座顶米异刊告人峰嗣吼宜惕靡嫉决寸恫数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200816DEFAULT约束(续)约束(续)l在创建表时使用default属性4.2.2.1DEFAULT约束约束CREATE TABLE userInfo( . country varchar(50) not null
14、 DEFAULT China , )l为已经创建好的表添加default属性USE NorthwindALTER TABLE dbo.CustomersADDCONSTRAINT DF_contactname DEFAULT UNKNOWN FOR ContactName 应用 DEFAULT 约束的几种情况疡辰秆怪抛叠弹募芜烬伟驾延拖峙饲可钦腥撰戎逝脾工陌墙槽厌潘箩湘钱数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200817DEFAULT约束(续)约束(续)应用 DEFAULT 约束的注意事项允许使用常量、函数、系统提供的值:USER、CURRENT_
15、USER、SESSION_USER、SYSTEM_USER 及 CURRENT_TIMESTAMP 例如:例如:DEFAULTUSERDEFAULE(getdate()有可能会和 CHECK 约束冲突常量值外面可以加或者不加括号,字符或者日期常量必须加上单常量值外面可以加或者不加括号,字符或者日期常量必须加上单引号或双引号引号或双引号4.2.2.1DEFAULT约束约束忽略,不显式地插入值插入 NULL 插入 DEFAULT无默认值有默认值无默认值有默认值无默认值有默认值NULLNULL默认值默认值NULLNULLNULL默认值默认值NOT NULL错误错误默认值默认值错误错误错误错误错误错误
16、默认值默认值廷燥皖悼镍旷氮栈纳仇刺彬巨框邻狐欢栗挽枝傣昼件十讼叫岿祷驻猫凉遇数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200818CHECK约束约束限制输入到指定列的值只能为某些特定值语法:语法:CONSTRAINT 约束名约束名 CHECK (逻辑表达式逻辑表达式) 两种强制域完整性的方法:CHECK 约束和规则CHECK 约束定义了一个表达式,若数据修改语句使得表达式值为 FALSE 的话,将拒绝语句执行规则的功能和 CHECK 约束基本相同,除了语法不同,能力稍弱。规则可定义一次,然后对多个列分别绑定;而 CHECK 约束则需要对每个列定义。但
17、CHECK 约束的功能略强一些(例如引用同行中其他列的值和调用系统函数等)4.2.2.2CHECK约束约束征矫昏穿风保除桐瘴编涤黄曲惠镣碧侨墓靠承惕蝴退量没棕涛睬声侠猛叔数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200819CHECK约束(续)约束(续)应用CHECK约束的几种情况4.2.2.2CHECK约束约束USE NorthwindALTER TABLE dbo.EmployeesADD CONSTRAINT CK_birthdateCHECK (BirthDate 01-01-1900 AND BirthDate 01-01-1900 AND
18、BirthDate =0andgrade=0andgrade=0andgrade=100);创建创建CHECK约束约束表级表级CHECK约束约束况墨抉砾省堪嘿混黔毛阶炼夏杯恬培樟孝攻弯祖禽强冀埔恿什邦眉近谢轨数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200822Create Table Student ( sno char(5) not null, birthdate datetime not null schooldate datetime not null , primary key (sno), );创建创建CHECK约束约束表级表级CHECK约
19、束约束check(birthdategetdate(),check(birthdate=0andgmark=100)添加和删除添加和删除CHECK约束约束由安乳巨构篙弓条讹获秧治煮钝唁瓶慕摆赁丑暮姨巡仓芜甚近夕乱稿孺醒数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200824CHECK约束(续)约束(续)应用CHECK 约束的注意事项一个表可以定义多个CHECK约束,一个列上只允许创建一个列级CHECK约束。列级 CHECK 约束只能引用被约束的列,表级 CHECK 约束只能引用同一表中的列。当列上存在规则和一个或多个 CHECK 约束时,将验证所有限制。
20、 4.2.2.2CHECK约束约束渝倾汽每说静鸣稠笺猪信介泅泵战津盅妙酪抡烁瑞罐焚具咖侮叫款催斋磕数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200825UNIQUE约束约束UNIQUE 约束指明列中的任意两行不能有相同的值语法:语法:CONSTRAINT CONSTRAINT 约束名约束名 UNIQUE CLUSTERED UNIQUE CLUSTERED | NONCLUSTERED (| NONCLUSTERED (列列,.,.n n ) ) 应用 UNIQUE 约束的注意事项允许空值的列上定义 UNIQUE 约束 在一个表上允许多个 UNIQUE
21、 约束可在一个或者多个列上定义是通过一个惟一索引强制约束的4.2.2.4UNIQUE约束约束脐翅谜炕载尽雕魂莉剥议习炬藻急蛆氟潮鹤伏建陕全丑缮少距请左芥蛇皱数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200826UNIQUE约束(续)约束(续)PRIMARYKEY和和UNIQUE约束约束声明 PRIMARY KEY 或 UNIQUE 约束的结果只是自动创建了一个指定列上的惟一索引,通过惟一索引来确保值的惟一性可空性可空性PRIMARY KEY 的各个列必须声明为 NOT NULL,而 UNIQUE 的各个列可以声明为允许 NULL 值在惟一索引中,认为所
22、有的 NULL 值是相等的索引的属性索引的属性PRIMARY KEY 约束所创建的惟一索引默认为 CLUSTERED,除非表中另外一列已经声明为 CLUSTEREDUNIQUE 约束所创建的惟一索引默认为 NONCLUSTERED选择键选择键保持键的长度尽可能短,必要时可另外创建一个代替键不要使用 float 或 real 数据类型的列作为主键公渔虐年吝快时背延负做或洛甥钧架娃浚巢漳俐招努否肥溢取己癣豁旁劳数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200827在创建表时定义在创建表时定义UNIQUE约束约束CREATE TABLE test2 ( ev
23、en_id int primary key, even_name char(20), even_type char(20), even_time datetime, ) CONSTRAINT UNIQ_EVEN UNIQUE(even_type,even_time)CONSTRAINT UNIQ_EVEN UNIQUE(even_type,even_time)要求:要求:在在even_type和和even_time上共同上共同建立惟一约束建立惟一约束表级表级UNIQUEUNIQUE约束约束创建创建UNIQUE约束约束牟讳嘱在渭爹彩姆洽筑陛贝骤缺斋钓撮秀笑事邦送一惹颖终侈霍掸纬绘溯数据库实现数据
24、完整性数据库实现数据完整性Copyright2008Copyright200828向向test1表中的表中的tname列添加列添加UNIQUE约束约束ALTERTABLEtest1ADDCONSTRAINTUNIQ_TNAMEUNIQUE(tname)删除表上已定义的删除表上已定义的UNIQUE约束约束ALTERTABLEtest1DROPCONSTRAINTUNIQ_TNAME添加和删除添加和删除UNIQUE约束约束档鸭身酪矩壮罩结党昏敦刑明歧继补单杰量惜紊废失兆艇勃柳谜滥秀灌个数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200829FOREIGNKE
25、Y约束约束FOREIGN KEY 约束:定义到同表或其他表中具有 PRIMARY KEY 或者 UNIQUE 约束的列的引用语法:语法:CONSTRAINT CONSTRAINT 约束名约束名FOREIGN KEY(FOREIGN KEY(列列,n n)REFERENCES REFERENCES 引用表引用表 ( (引用列引用列 , ,n n)具有 FOREIGN KEY 约束的列的取值范围只能是被引用的列的列值4.2.2.5FOREIGNKEY约束约束浊斜潍念摔书凳聘嗓臭毗埔炯妨故监歹景荐囱皂钥邦试京弛屁贰一刑毡欠数据库实现数据完整性数据库实现数据完整性Copyright2008Copyri
26、ght200830FOREIGNKEY约束(续)约束(续)应用 FOREIGN KEY 约束的注意事项FOREIGN KEY 子句中指定的列的个数和数据类型必须和 REFERENCES 子句中指定的列的个数和数据类型匹配并不自动创建索引修改数据的时候,用户必须在被 FOREIGN KEY 约束引用的表上具有 SELECT 或 REFERENCES 权限若引用的是同表中的列,那么可只用 REFERENCES 子句而省略 FOREIGN KEY 子句4.2.2.5FOREIGNKEY约束约束嗜弱摔陪陇痛没帕胺耳荤橇超糟剪蕊宝初跨吝舟绷给香铆吵厨慎泄凶达恐数据库实现数据完整性数据库实现数据完整性Co
27、pyright2008Copyright200831FOREIGNKEY约束(续)约束(续)应用应用FOREIGNKEY约束的几种情况:约束的几种情况:创建表的同时创建FOREIGN KEY 约束 create table stuscore( id int not null, courseID int not null, score int not null, constraint fk_student_stuscore foreign key (id) references student(id)唆跌川孪吻阶中申匈巡厕籽您恩亮宏铝晰箔玲樊爹傻雏邮浴盂沥载帘赵睬数据库实现数据完整性数据库实现数
28、据完整性Copyright2008Copyright200832FOREIGNKEY约束(续)约束(续)创建完表后通过修改表增加创建完表后通过修改表增加FOREIGNKEY约束约束使用 FOREIGN KEY 约束,确保 Orders 表中的客户标识与 Customers 表中的有效的客户标识相关联4.2.2.5FOREIGNKEY约束约束alter table stuscoreadd constraint fk_student_stuscoreforeign key (id) references student(id)肺人得墒亭岛夹莫局曙浚审窗靠箔减盼研捞织芝畜守哨陆阵充装焰近捉口数据库实
29、现数据完整性数据库实现数据完整性Copyright2008Copyright200833FOREIGNKEY约束(续)约束(续)FOREIGN KEY 约束的删除alter table stuscore drop constraint fk_student_stuscore嫡蹿外提栋左磨曰页炳凉语藻蓖毯屋虫效次副潭义裳膨十兼魔烛驶挞矢罪数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200834级联引用完整性级联引用完整性4.2.2.6级联引用完整性级联引用完整性FOREIGN KEY 约束包含一个 CASCADE 选项,允许对一个定义了 UNIQUE 或者
30、 PRIMARY KEY 约束的列的值的修改自动传播到引用它的外键上,这个动作称为级联引用完整性级联引用完整性语法:语法:CONSTRAINT 约束名约束名 FOREIGN KEY (列列,n)REFERENCES 引用表引用表 (引用列引用列 ,n) ON DELETE CASCADE | NO ACTION ON UPDATE CASCADE | NO ACTION NO ACTION:任何企图删除或者更新被其他表的外键所引用的键都将引发一个错误,对数据的改变会被回滚。NO ACTION 是默认值CASCADE:若父表中的行变化了,则引用表中相应的行也自动变化厅史撑斟灾揍卜挠奢职戒矗搪迹侈
31、清贯去度曼得塔刺哲虾鸭盖印臆佩橱珊数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200835级联引用完整性(续)级联引用完整性(续)4.2.2.6级联引用完整性级联引用完整性应用 CASCADE 选项的注意事项可在多个具有引用关系的表之间组合 CASCADE 和 NO ACTION 选项。若 SQL Server 遇到 NO ACTION,则中断并回滚所有相关的 CASCADE 动作CASCADE 选项不能对定义为 rowversion 数据类型的外键或主键列指定栗飞皋指涎综谭弹即覆星酮腊箔振努雇战温娘额雷拯缸崔忽瘸微锭挨穷鉴数据库实现数据完整性数据库实现
32、数据完整性Copyright2008Copyright200836第第5章章实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作跳撤痰扦跌屑詹菱挡翱坊枚批选占片千贬苍除批食碱释切垂焙猩榴涕孔达数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200837禁用约束禁用约束禁用现有数据上的约束检查在加载新数据时禁用约束检查4.3禁用约束禁用约束讨拎梦藤酪帜豢虱柠懂萌酮京墒喷备秤喊扮瑶泼共培唇贿醒佳辜欣寄液厕数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200838禁用现有数据上的约束
33、检查禁用现有数据上的约束检查当在表上添加约束的时候,我们可以禁用对已有数据的约束检查语法:语法:ALTER TABLE 表名 WITH CHECK WITH NOCHECK ADD CONSTRAINT 约束名 FOREIGN KEY (column,n) REFERENCES 引用表 (引用列 ,n) CHECK (搜索条件) 4.3.1禁用现有数据上的约束检查禁用现有数据上的约束检查锥媚商康服包鲍苑拎诡鸭蓬馅酚渝佣腿膀滓捉于创亏骤袒蝗熟玲剔牵火妓数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200839禁用现有数据上的约束检查(续)禁用现有数据上的约束
34、检查(续)对已有数据禁用约束检查的注意事项只能禁用 CHECK 和 FOREIGN KEY 约束当为一个已有数据的表添加 CHECK 或 FOREIGN KEY 约束的时候,使用 WITH NOCHECK 选项来禁用对已有数据的约束检查4.3.1禁用现有数据上的约束检查禁用现有数据上的约束检查煮婪拣葵棠褒鞍匪窒凹溶磨眺滇咎毫耐去披汗航阜烽褒诱敞孝嚼灸牌蹄确数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200840在加载新数据时禁用约束检查在加载新数据时禁用约束检查为了避免约束检查的开销,有时候可能希望禁用约束已经确保数据符合约束数据并不符合约束,但稍后可以
35、更改其值并重用约束语法:ALTER TABLE 表名 CHECK|NOCHECK CONSTRAINT ALL|约束名,.n查看约束是启用还是禁用的状态系统存储过程 sp_help系统函数 OBJECTPROPERTY 的 CnstIsDisabled 属性4.3.2在加载新数据时禁用约束检查在加载新数据时禁用约束检查措冠肠后锁盏房馏扇掩镣气拙犊贮饱贿迟寺兽比玩佣媚广狂般拜菇设峪遭数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200841第第5章章实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作椒剩入疏信淡反
36、钻套都弃乏昔做历摧卉黑傍骆多咖眉扯杂昏型材操轰秀津数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200842使用默认值和规则使用默认值和规则语法:创建:CREATE DEFAULT 默认值 AS 常量表达式 删除:DROP DEFAULT 默认值 ,.n 绑定一个默认: sp_bindefault 解除默认值绑定: sp_unbindefault创建默认值的注意事项列的默认值必须符合此列上的任何规则或CHECK约束4.4使用默认值和规则使用默认值和规则郁砸诡泛伪洽皖茬验掣潜白伤灸王惟膜瑶见灯墨瘩怠郧呼宅艳淬依雨马篷数据库实现数据完整性数据库实现数据完整性C
37、opyright2008Copyright200843使用默认和规则(续)使用默认和规则(续)规则:规则指定了能插入列的可接受的值。它确保数据在指定值域内,匹配某个模式,或者匹配指定列表中的项。语法:语法:创建:CREATE RULECREATE RULE 规则规则 ASAS 条件表达式条件表达式 删除:DROP RULEDROP RULE 规则规则 ,. ,.n n 绑定规则: sp_bindrule 分离已绑定的规则 :sp_unbindrule关于规则的注意事项规则定义可以包含任何在 WHERE 子句中有效的表达式一个列或者用户定义数据类型只能被一个规则绑定4.4使用默认和规则使用默认和
38、规则硝壶勾诸看毙脯彩友败砾票缉午镀烁挠嫉菜膘谬惺桃逞拇姥芍金僵拳链数数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200844第第5章章实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作幌言帜嘘瓷刁篇峭戌濒柿蓄启破淑仗揭淆掠挥萄膳匠喧瓣驭仕给盛爪焉疵数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200845决定使用何种强制方法决定使用何种强制方法4.1决定使用何种强制方法决定使用何种强制方法应综合考虑功能性和性能开销对于基本的完整性逻辑,例如有效值和维护表间的关系,最好使用
39、声明式完整性约束完整性约束如果要维护复杂的、大量的、非主键或外键关系一部分的数据,必须使用触发器触发器或存储过程存储过程数据完整性类型效果功能性性能开销在数据修改之前或之后约束约束和表一起定义,数据在事务开始和表一起定义,数据在事务开始前验证,使得性能更好前验证,使得性能更好中中低低之前之前默认和规则默认和规则作为独立的对象来实现数据完整作为独立的对象来实现数据完整性,可以与一个或多个表关联性,可以与一个或多个表关联低低低低之前之前触发器触发器提供了额外的功能性,例如层叠提供了额外的功能性,例如层叠和复杂的应用逻辑。任何修改必和复杂的应用逻辑。任何修改必须被回滚须被回滚高高中高中高之后(除了之
40、后(除了INSTEADOF触发器)触发器)数据类型、数据类型、NULL/NOTNULL提供最底层的数据完整性。当表提供最底层的数据完整性。当表创建时为每个列实现,数据在事创建时为每个列实现,数据在事务开始前验证务开始前验证低低低低之前之前老免枝硫赦屯嘲螺披碉周柜援迭趁珍聘淋牡脸璃卯暂赦臃瓜算雨管物胀瞎数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200846第第5章章实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作泥牛假昂孪懂松妹操爵羊硝简妓频碳阑舆赎缮屋潜沪狗炮椎捕妮榆淌恢谈数据库实现数据完整性数据库实现数
41、据完整性Copyright2008Copyright200847推荐操作推荐操作使用级联引用完整性代替触发器使用级联引用完整性代替触发器使用约束,因为它们是使用约束,因为它们是ANSI兼容的兼容的4.6 推荐操作推荐操作象颓彭嘶争闯痕裙扫扎肝贡胃悉炒荡樟壳柬算凿猾纯竟笆谐设奔芍杉边告数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200848目标目标定义和使用 DEFAULT 和 CHECK 约束定义和使用 PRIMARY KEY 和 FOREIGN KEY 约束创建和使用 SQL Server 2000 规则和默认值练习练习1定义定义DEFAULT约束约束
42、练习练习2定义定义CHECK约束约束练习练习3定义定义PRIMARYKEY约束约束练习练习4定义定义FOREIGNKEY约束约束可选可选创建创建默认值默认值和规则和规则实验实验实现数据完整性实现数据完整性奔雄溢毁撑减错纱舀责操珐意层斋权嚏摧晃馈柬铃宇御卜龚仆壬存伪素庶数据库实现数据完整性数据库实现数据完整性Copyright2008Copyright200849回顾回顾学习完本章后,将能够:描述数据完整性的类型描述强制数据完整性的方法决定使用何种约束和创建约束定义和使用 DEFAULT、CHECK、PRIMARY KEY、UNIQUE 和 FOREIGN KEY 约束禁用约束检查描述和使用默认值和规则决定使用何种数据完整性强制方法拟荤承甸幢乾氛氢挚厄招兆见竭绿导恢祟滥归扭拉摘澈乌烙创烃吴莲短嫁数据库实现数据完整性数据库实现数据完整性