当前位置:文档之家› 实现数据完整性

实现数据完整性

CREATE TABLE 或 ALTER TABLE 时使用 DEFAUTL 约束
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
15
DEFAULT 约束(续)
4.2.2.1 DEFAULT 约束
应用 DEFAULT 约束的几种情况
在创建表时使用default属性
CREATE TABLE userInfo ( ... …
country varchar(50) not null …… )
DEFAULT
‘China’ ,
为已经创建好的表添加default属性
USE Northwind ALTER TABLE dbo.Customers ADD CONSTRAINT DF_contactname DEFAULT 'UNKNOWN' FOR ContactName
例如: ① DEFAULT USER ② DEFAULE (getdate()) 有可能会和 CHECK 约束冲突
常量值外面可以加或者不加括号,字符或者日期常量必须加上单 引号或双引号
NULL
NOT NULL
忽略, 不显式地插入值
无默认值 有默认值
NULL
默认值
错误
默认值
插入 NULL
插入 DEFAULT
……
);
创建sc表,其主码为(sno,cno)
CREATE TABLE sc
× ? ? ? (sno char(5) PRIMARY KEY, cno char(1) PRIMARY KEY,
grade decimal(4,1)) );
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
2
数据完整性的类型
数据完整性
4.1 数据完整性的类型
指的是数据库中存储的数据的一致性和准确性
数据完整性的类型:域完整性、实体完整性、引用完 整性
域完整性
域(或列)完整性是指对列指定一组有效的值并决定 是否可为空值
实体完整性
实体(或表)完整性要求表中的所有行都有一个惟一 的标识符,称为主键值
UNIQUE
FOREIGN KEY
CHECK
描述
如果在INSERT语句中未显式提供 值,则指定为列提供的值 指定列中可接受的数据值
基于其他表中的列的值,指定可接受的 用于更新的数据值
惟一标识每一列,确保用户没有输入重 复的值。同时创建一个索引以增强性能。 不允许空值
确保在非主键列中不输入重复值,并创 建一个索引以增强性能。允许空值
grade decimal(4,1) check(grade>=0 and grade<=100),
primary key (sno,cno));
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
20
创建CHECK 约束
Create Table SC
CREATE TABLE sc1
约束名
( ………., constraint PK_SC PRIMARY KEY(sno,cno));
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
13
删除和添加主键
删除表上已定义的主键 ALTER TABLE SC1 DROP CONSTRAINT PK_SC;
Version No: 1.0
9
PRIMARY KEY 约束
4.2.2.3 PRIMARY KEY 约束
PRIMARY KEY 约束在表中定义了一 个惟一标识每一列的主键
语法:[CONSTRAINT 约束名 ] PRIMARY
KEY [CLUSTERED | NONCLUSTERED ]
{ (列[,...n])}
如果一个列的值在 INSERT 语句中没有指定, DEFAULT 约束将自动输入一个值,可以是预先指定 的常量、NULL 或者一个系统函数运行时的值
语法:
[CONSTRAINT 约束名] DEFAULT 约束表达式
创建 DEFAULT 约束的两种方法
创建一个默认对象(CREATE DEFAULT),然后 使用存储过程 sp_bindefault 将默认绑定到一个列
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
8
约束的类型
DEFAULT 约束 CHECK 约束 PRIMARY KEY 约束 UNIQUE 约束 FOREIGN KEY 约束 级联引用完整性
4.2.2 约束的类型
Copyright@2006 College of ITSoft (HZIEE)
第5章 实现数据完整性
数据完整性的类型 约束 禁用约束 默认值和规则 决定使用何种强制方法 推荐操作
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
பைடு நூலகம்
1
数据完整性的类型
域完整性 (列)
实体完整性 (行)
参照完整性 (表之间)
Copyright@2006 College of ITSoft (HZIEE)
可以添加约束到已有数据的表上
可添加单列或多列约束
若约束应用于单列,称为列级约束 若约束引用了多列,称为表级约束,即使它并
没有引用表中的所有列
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
7
使用约束的注意事项
可直接在表上创建、更改和删除约束,而不必删 除并重建表
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
11
PRIMARY KEY 约束
直接在列名后增加关键字 PRIMARY KEY
CREATE TABLE Student
( sno char(5) PRIMARY KEY,
列级主键
sname varchar(20) not null,
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
19
创建CHECK 约束
在创建SC表时定义CHECK约束
Create Table SC
( sno char(5) not null, cno char(1) not null,
列级CHECK约束
CHECK (BirthDate > '01-01-1900' AND BirthDate < getdate()) , )
在现有表中创建CHECK约束
USE Northwind ALTER TABLE dbo.Employees ADD CONSTRAINT CK_birthdate CHECK (BirthDate > '01-01-1900' AND BirthDate < getdate())
查看约束的信息
系统存储过程:sp_helpconstraint、sp_help 信息模式视图:check_constraints、referential_constraints、
table_constraints
系统表:syscomments、sysreferences、sysconstraints
Version No: 1.0
4
约束
决定使用何种约束 约束的类型
4.2 约束
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
5
决定使用何种约束
4.2.1 决定使用何种约束
完整性类型 域
实体
引用
约束类型 DEFAULT
CHECK REFERENTIAL (通常使用外键) PRIMARY KEY
引用完整性
引用完整性确保主键(在被引用表中)和外键(在引 用表中)之间的关系得到保持
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
3
第5章 实现数据完整性
数据完整性的类型 约束 禁用约束 默认值和规则 决定使用何种强制方法 推荐操作
Copyright@2006 College of ITSoft (HZIEE)
( sno char(5) not null,
cno char(1) not null,
grade decimal(4,1), primary key (sno,cno),
表级CHECK约束
check(grade>=0 and grade<=100));
Version No: 1.0
12
PRIMARY KEY 约束
在CREATE TABLE语句各列定义的最后加: PRIMARY KEY(<属性名表>)
CREATE TABLE sc (sno char(5) , cno char(1) , grade decimal(4,1), PRIMARY KEY(sno,cno)); 表级主键
应该在应用程序和事务内建立错误检查逻辑,以 测试是否违反了某个约束
SQL Server 里的约束只是“最后防线”
当给一个表添加约束的时候,SQL Server 将检查 现有数据是否违反约束
建议创建约束的时候指定名称,否则系统将为约 束自动产生一个复杂的名称
相关主题