数据库实现数据完整性.ppt
《数据库实现数据完整性.ppt》由会员分享,可在线阅读,更多相关《数据库实现数据完整性.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Copyright2008Copyright20081数据库实现数据完整性 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望Copyright2008Copyright20082数据完整性的类型数据完整性的类型域完整性域完整性(列列)实体完整性实体完整性(行)(行)参照完整性参照完整性(表之间表之间)Copyright2008Copyright20083数据完整性的类型数据完整性的类型4.1 数据完整性的类型数据完整性的类型数据完整性数据完整性指的是数据库中存储的数
2、据的一致性和准确性数据完整性的类型:域完整性、实体完整性、引用完整性域完整性域完整性域(或列)完整性是指对列指定一组有效的值并决定是否可为空值实体完整性实体完整性实体(或表)完整性要求表中的所有行都有一个惟一的标识符,称为主键值引用完整性引用完整性引用完整性确保主键(在被引用表中)和外键(在引用表中)之间的关系得到保持Copyright2008Copyright20084第第5章章 实现数据完整性实现数据完整性数据完整性的类型约束禁用约束默认值和规则决定使用何种强制方法推荐操作Copyright2008Copyright20085决定使用何种约束约束的类型约束约束4.2 约束约束Copyrig
3、ht2008Copyright20086决定使用何种约束决定使用何种约束4.2.1 决定使用何种约束决定使用何种约束完整性类型约束类型描述域域DEFAULT如果在INSERT语句中未显式提供值,则指定为列提供的值CHECK指定列中可接受的数据值REFERENTIAL(通常使用外键)基于其他表中的列的值,指定可接受的用于更新的数据值实体实体PRIMARY KEY惟一标识每一列,确保用户没有输入重复的值。同时创建一个索引以增强性能。不允许空值UNIQUE确保在非主键列中不输入重复值,并创建一个索引以增强性能。允许空值引用引用FOREIGN KEY定义一列或多列的值与同表或其他表中主键的值匹配CHE
4、CK基于同表中其他列的值,指定列中可接受的数据值Copyright2008Copyright20087创建约束创建约束使用 CREATE TABLE 或者 ALTER TABLECREATE TABLE 是在创建表时创建约束ALTER TABLE 是在一个已有的表上创建约束可以添加约束到已有数据的表上可添加单列或多列约束若约束应用于单列,称为列级约束若约束引用了多列,称为表级约束,即使它并没有引用表中的所有列4.3.2 创建约束创建约束Copyright2008Copyright20088使用约束的注意事项使用约束的注意事项可直接在表上创建、更改和删除约束,而不必删除可直接在表上创建、更改和删
5、除约束,而不必删除并重建表并重建表应该在应用程序和事务内建立错误检查逻辑,以测应该在应用程序和事务内建立错误检查逻辑,以测试是否违反了某个约束试是否违反了某个约束SQL Server 里的约束只是“最后防线”当给一个表添加约束的时候,当给一个表添加约束的时候,SQL Server 将检查将检查现有数据是否违反约束现有数据是否违反约束建议创建约束的时候指定名称,否则系统将为约束建议创建约束的时候指定名称,否则系统将为约束自动产生一个复杂的名称自动产生一个复杂的名称名称必须惟一,且符合 SQL Server 标识符的规则查看约束的信息查看约束的信息系统存储过程:sp_helpconstraint、
6、sp_help信息模式视图:check_constraints、referential_constraints、table_constraints系统表:syscomments、sysreferences、sysconstraintsCopyright2008Copyright20089约束的类型约束的类型DEFAULT 约束CHECK 约束PRIMARY KEY 约束UNIQUE 约束FOREIGN KEY 约束级联引用完整性4.2.2 约束的类型约束的类型Copyright2008Copyright200810PRIMARY KEY 约束约束PRIMARY KEY 约束在表中定义了一个惟一
7、标识每一列的主键语法:语法:CONSTRAINT 约束名约束名 PRIMARY KEY CLUSTERED|NONCLUSTERED (列列,.n)4.2.2.3 PRIMARY KEY 约束约束Copyright2008Copyright200811 PRIMARY KEY约束利用表中的一列或多列数据唯一地标识某一行数据每个表只有一个PRIMARY KEY约束PRIMARY KEY约束的值必须是唯一的不允许有空值SQL Server中最多可定义 16 列作为主键PRIMARY KEY 约束约束Copyright2008Copyright200812n直接在列名后增加关键字直接在列名后增加关键
8、字 PRIMARY KEY CREATE TABLE Student(sno char(5)PRIMARY KEY,sname varchar(20)not null,);列级主键列级主键 创建创建sc表,其主码为(表,其主码为(sno,cno)?CREATE TABLE sc (sno char(5)PRIMARY KEY,cno char(1)PRIMARY KEY,grade decimal(4,1);PRIMARY KEY 约束约束Copyright2008Copyright200813n在在CREATE TABLE语句各列定义的最后加语句各列定义的最后加:PRIMARY KEY()C
9、REATE TABLE sc (sno char(5),cno char(1),grade decimal(4,1),PRIMARY KEY(sno,cno);n CREATE TABLE sc1 (.,constraint PK_SC PRIMARY KEY(sno,cno);表级主键表级主键约束名约束名PRIMARY KEY 约束约束Copyright2008Copyright200814n删除表上已定义的主键删除表上已定义的主键 ALTER TABLE SC1 DROP CONSTRAINT PK_SC;n在没有定义主键的表上,加上一个主键在没有定义主键的表上,加上一个主键 ALTER
10、TABLE SC ADD CONSTRAINT PK_SC primary key(sno,cno);删除和添加主键删除和添加主键Copyright2008Copyright200815DEFAULT 约束约束如果一个列的值在 INSERT 语句中没有指定,DEFAULT 约束将自动输入一个值,可以是预先指定的常量、NULL 或者一个系统函数运行时的值语法:语法:CONSTRAINT 约束名约束名 DEFAULT 约束表达式约束表达式 创建 DEFAULT 约束的两种方法创建一个默认对象(CREATE DEFAULT),然后使用存储过程 sp_bindefault 将默认绑定到一个列CREAT
11、E TABLE 或 ALTER TABLE 时使用 DEFAUTL 约束4.2.2.1 DEFAULT 约束约束Copyright2008Copyright200816DEFAULT 约束(续)约束(续)l在创建表时使用default属性4.2.2.1 DEFAULT 约束约束CREATE TABLE userInfo(.country varchar(50)not null DEFAULT China ,)l为已经创建好的表添加default属性USE NorthwindALTER TABLE dbo.CustomersADDCONSTRAINT DF_contactname DEFAULT
12、 UNKNOWN FOR ContactName 应用 DEFAULT 约束的几种情况Copyright2008Copyright200817DEFAULT 约束(续)约束(续)应用 DEFAULT 约束的注意事项允许使用常量、函数、系统提供的值:USER、CURRENT_USER、SESSION_USER、SYSTEM_USER 及 CURRENT_TIMESTAMP 例如:例如:DEFAULT USER DEFAULE (getdate()有可能会和 CHECK 约束冲突常量值外面可以加或者不加括号,字符或者日期常量必须加上单常量值外面可以加或者不加括号,字符或者日期常量必须加上单引号或双
13、引号引号或双引号4.2.2.1 DEFAULT 约束约束忽略,不显式地插入值插入 NULL 插入 DEFAULT无默认值有默认值无默认值有默认值无默认值有默认值NULLNULL默认值默认值NULLNULLNULL默认值默认值NOT NULL错误错误默认值默认值错误错误错误错误错误错误默认值默认值Copyright2008Copyright200818CHECK 约束约束限制输入到指定列的值只能为某些特定值语法:语法:CONSTRAINT 约束名约束名 CHECK(逻辑表达式逻辑表达式)两种强制域完整性的方法:CHECK 约束和规则CHECK 约束定义了一个表达式,若数据修改语句使得表达式值为
14、FALSE 的话,将拒绝语句执行规则的功能和 CHECK 约束基本相同,除了语法不同,能力稍弱。规则可定义一次,然后对多个列分别绑定;而 CHECK 约束则需要对每个列定义。但 CHECK 约束的功能略强一些(例如引用同行中其他列的值和调用系统函数等)4.2.2.2 CHECK 约束约束Copyright2008Copyright200819CHECK 约束(续)约束(续)应用CHECK约束的几种情况4.2.2.2 CHECK 约束约束USE NorthwindALTER TABLE dbo.EmployeesADD CONSTRAINT CK_birthdateCHECK(BirthDate
15、 01-01-1900 AND BirthDate 01-01-1900 AND BirthDate=0 and grade=0 and grade=0 and grade=100);创建创建CHECK 约束约束表级表级CHECK约束约束Copyright2008Copyright200822lCreate Table Student (sno char(5)not null,birthdate datetime not null schooldate datetime not null,primary key(sno),);创建创建CHECK 约束约束表级表级CHECK约束约束check(b
16、irthdate getdate(),check(birthdate=0 and gmark=100)添加和删除添加和删除CHECK 约束约束Copyright2008Copyright200824CHECK 约束(续)约束(续)应用CHECK 约束的注意事项一个表可以定义多个CHECK约束,一个列上只允许创建一个列级CHECK约束。列级 CHECK 约束只能引用被约束的列,表级 CHECK 约束只能引用同一表中的列。当列上存在规则和一个或多个 CHECK 约束时,将验证所有限制。4.2.2.2 CHECK 约束约束Copyright2008Copyright200825UNIQUE 约束约束
17、UNIQUE 约束指明列中的任意两行不能有相同的值语法:语法:CONSTRAINT CONSTRAINT 约束名约束名 UNIQUE CLUSTERED UNIQUE CLUSTERED|NONCLUSTERED (|NONCLUSTERED (列列,.,.n n)应用 UNIQUE 约束的注意事项允许空值的列上定义 UNIQUE 约束 在一个表上允许多个 UNIQUE 约束可在一个或者多个列上定义是通过一个惟一索引强制约束的4.2.2.4 UNIQUE 约束约束Copyright2008Copyright200826UNIQUE 约束(续)约束(续)PRIMARY KEY 和和 UNIQUE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实现 数据 完整性
限制150内