实现数据完整性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)); 表级主键
第5章 实现数据完整性
数据完整性的类型 约束 禁用约束 默认值和规则 决定使用何种强制方法 推荐操作
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
1
数据完整性的类型
域完整性 (列)
实体完整性 (行)
参照完整性 (表之间)
Copyright@2006 College of ITSoft (HZIEE)
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
Version No: 1.0
2
数据完整性的类型
数据完整性
4.1 数据完整性的类型
指的是数据库中存储的数据的一致性和准确性
数据完整性的类型:域完整性、实体完整性、引用完 整性
域完整性
域(或列)完整性是指对列指定一组有效的值并决定 是否可为空值
实体完整性
实体(或表)完整性要求表中的所有行都有一个惟一 的标识符,称为主键值
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;
应该在应用程序和事务内建立错误检查逻辑,以 测试是否违反了某个约束
SQL Server 里的约束只是“最后防线”
当给一个表添加约束的时候,SQL Server 将检查 现有数据是否违反约束
建议创建约束的时候指定名称,否则系统将为约 束自动产生一个复杂的名称
名称必须惟一,且符合 SQL Server 标识符的规则
Version No: 1.0
9
PRIMARY KEY 约束
4.2.2.3 PRIMARY KEY 约束
PRIMARY KEY 约束在表中定义了一 个惟一标识每一列的主键
语法:[CONSTRAINT 约束名 ] PRIMARY
KEY [CLUSTERED | NONCLUSTERED ]
{ (列[,.百度文库.n])}
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
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约束
UNIQUE
FOREIGN KEY
CHECK
描述
如果在INSERT语句中未显式提供 值,则指定为列提供的值 指定列中可接受的数据值
基于其他表中的列的值,指定可接受的 用于更新的数据值
惟一标识每一列,确保用户没有输入重 复的值。同时创建一个索引以增强性能。 不允许空值
确保在非主键列中不输入重复值,并创 建一个索引以增强性能。允许空值
CREATE TABLE 或 ALTER TABLE 时使用 DEFAUTL 约束
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
15
DEFAULT 约束(续)
4.2.2.1 DEFAULT 约束
应用 DEFAULT 约束的几种情况
在创建表时使用default属性
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
10
PRIMARY KEY 约束
PRIMARY KEY约束利用表中的一列或多 列数据唯一地标识某一行数据 每个表只有一个PRIMARY KEY约束 PRIMARY KEY约束的值必须是唯一的 不允许有空值 SQL Server中最多可定义 16 列作为主键
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)
如果一个列的值在 INSERT 语句中没有指定, DEFAULT 约束将自动输入一个值,可以是预先指定 的常量、NULL 或者一个系统函数运行时的值
语法:
[CONSTRAINT 约束名] DEFAULT 约束表达式
创建 DEFAULT 约束的两种方法
创建一个默认对象(CREATE DEFAULT),然后 使用存储过程 sp_bindefault 将默认绑定到一个列
在没有定义主键的表上,加上一个主键 ALTER TABLE SC ADD CONSTRAINT PK_SC primary key (sno,cno);
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
14
DEFAULT 约束
4.2.2.1 DEFAULT 约束
两种强制域完整性的方法:CHECK 约束和规则
CHECK 约束定义了一个表达式,若数据修改语句使 得表达式值为 FALSE 的话,将拒绝语句执行
规则的功能和 CHECK 约束基本相同,除了语法不同, 能力稍弱。
规则可定义一次,然后对多个列分别绑定;而 CHECK 约束则需要对每个列定义。但 CHECK 约束 的功能略强一些(例如引用同行中其他列的值和调用 系统函数等)
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
例如: ① DEFAULT USER ② DEFAULE (getdate()) 有可能会和 CHECK 约束冲突
常量值外面可以加或者不加括号,字符或者日期常量必须加上单 引号或双引号
NULL
NOT NULL
忽略, 不显式地插入值
无默认值 有默认值
NULL
默认值
错误
默认值
插入 NULL
插入 DEFAULT
( 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));
引用完整性
引用完整性确保主键(在被引用表中)和外键(在引 用表中)之间的关系得到保持
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
3
第5章 实现数据完整性
数据完整性的类型 约束 禁用约束 默认值和规则 决定使用何种强制方法 推荐操作
Copyright@2006 College of ITSoft (HZIEE)
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
7
使用约束的注意事项
可直接在表上创建、更改和删除约束,而不必删 除并重建表
无默认值 NULL 错误
有默认值 NULL 错误
无默认值 NULL 错误
有默认值 默认值 默认值
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
17
CHECK 约束
4.2.2.2 CHECK 约束
限制输入到指定列的值只能为某些特定值
语法: [CONSTRAINT 约束名] CHECK (逻辑表达式)
查看约束的信息
系统存储过程:sp_helpconstraint、sp_help 信息模式视图:check_constraints、referential_constraints、
table_constraints
系统表:syscomments、sysreferences、sysconstraints
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
18
CHECK 约束(续)
应用CHECK约束的几种情况
在创建表时使用CHECK约束
4.2.2.2 CHECK 约束
CREATE TABLE userInfo ( ... … birthday varchar(50) not null CONSTRAINT ck_birthday
定义一列或多列的值与同表或其他表中 主键的值匹配
基于同表中其他列的值,指定列中可接 受的数据值
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
6
创建约束
4.3.2 创建约束
使用 CREATE TABLE 或者 ALTER TABLE
CREATE TABLE 是在创建表时创建约束 ALTER TABLE 是在一个已有的表上创建约束
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())
……
);
创建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)
Copyright@2006 College of ITSoft (HZIEE)
Version No: 1.0
16
DEFAULT 约束(续)
4.2.2.1 DEFAULT 约束
应用 DEFAULT 约束的注意事项
允许使用常量、函数、系统提供的值:USER、 CURRENT_USER、SESSION_USER、SYSTEM_USER 及 CURRENT_TIMESTAMP