第5章 SQL数据定义与完整性约束的实现(试讲)
实验五 SQL语句实现实体完整性约束

实验五 SQL语句实现实体完整性约束姓名:王秋园学号:2013133333 班级:13金信实体完整性1.SQL创建primary key约束(1).为T表在TNO列上创建primary key约束Use TestGoAlter table TEST_TAdd constraint firstname primary key(TNO)Go(2).用SQL创建数据库表TEST_C,并以列约束形式创建primary keyUse TestGoCreate table TEST_C(CNO char(2) constraint PK_TEST_C primary key,CN char(10),CT tinyint)Go(3).用SQL创建数据库表TEST_TC,并以表约束形式创建primary key Use TestGoCreate table TEST_TC(TNO char(2),CNO char(2),Constraint PK_TEST_TC primary key(TNO,CNO))Go2.SQL创建unique约束Use TestGoAlter table TEST_CAdd constraintunique_Cunique(CN)Go3.SQL为现有表TEST_TC增加新列ID_TC,并设置此列属性为identityUse TestGoAlter table TEST_TCAdd ID_TC intidentityGo4.用SQL删除表C中CN列的unique约束Use TestGoAlter table TEST_C drop unique_CGo参照完整性1.用SQL创建表T与表TC之间的参照关系。
2.创建其余的关联表C与表TC表S与表SC表C与表SC3.用不同的方法创建下列约束:(1)“姓名”字段取值唯一Use TestGoAlter table TEST_SAdd constraint unique_S unique(SN)(2)“性别”字段取值为‘男’或‘女’,默认值为‘男’(3)“年龄”和“分数”字段取值限定为0~1004.验证上述的完整性。
第5章sql数据库完整性约束

5.2.4 默认值(DEFAULT)约束
默认约束是指在用户未提供某些列的数据时,数据库 系统为用户提供的默认值。从而简化应用程序代码和提高 系统性能。 表的每一列都可包含一个DEFAULT定义。可以修改或 删除现有的DEFAULT定义,但必须首先删除已有的 DEFAULT定义,然后通过新定义重新创建。 1.利用Management Studio定义(删除)default约束 步骤1:右键要建立default约束的表选择“修改”。 步骤2:在弹出的窗口中对应字段的“默认值或绑定”处 输入默认值。 步骤3:点击保存即可。
PRIMARY KEY约束在表中定义一个主键,唯一的标 识表中的行。一个表只能有一个PRIMARY KEY约束。
当向表中的现有列添加PRIMARY KEY约束时,SQL Server将检查列中现有的数据以确保现有数据遵从主键的 规则,即无空值、无重复值。 每个表都应有一个主键。主键可以是一列或列组合。
CREATE TABLE kc_new (5-4)
(课程号 CHAR(4) NOT NULL CONSTRAINT pk_kch1 PRIMARY KEY, 课程名 CHAR(16) NOT NULL CONSTRAINT ix_kcm1 UNIQUE,
学分 SMALLINT,
实现数据完整性约束

实现数据完整性约束数据完整性约束是指在数据库中确保数据的准确性、一致性和有效性的一组规则和限制。
这些约束可以保护数据库以免受到无效、不一致或重复数据的影响。
通过实施数据完整性约束,可以确保数据库中的数据具有一定的质量和价值,从而增强数据库的可靠性和可用性。
数据完整性约束可以通过多种方式实现,下面是一些常见的方法:1. 主键约束(Primary Key Constraint):主键是一种唯一标识数据库表中每一行的字段(或一组字段),它的值不能重复且不能为空。
通过为表定义主键,并将该字段(或字段组合)设置为主键约束,可以确保表中的每一行都有唯一标识,并且不存在空值。
3. 唯一约束(Unique Constraint):唯一约束用于确保表中的一些字段(或一组字段)的值是唯一的,即在表中不存在重复值。
通过为表中的字段添加唯一约束,可以防止插入重复数据,从而保证数据的一致性。
4. 非空约束(Not Null Constraint):非空约束用于确保表中的一些字段不允许为空值。
通过为字段添加非空约束,可以强制要求在插入或更新数据时必须为该字段提供有效的值,从而防止插入无效数据。
5. 默认约束(Default Constraint):默认约束用于在插入新记录时为字段提供默认值。
通过定义默认约束,可以确保在没有明确赋值的情况下,字段总是具有预先定义的默认值,从而确保数据的完整性。
6. 检查约束(Check Constraint):检查约束用于在插入或更新数据时对字段的值进行验证。
通过定义检查约束,可以限制字段的值必须满足特定的条件,例如数值范围、正则表达式匹配等。
这样可以确保插入或更新的数据满足预期的要求,从而保证数据的有效性和一致性。
为了实现数据完整性约束,数据库管理系统(DBMS)通常提供了相应的语法和功能来定义和应用这些约束。
通过在创建表时使用适当的约束语句,或者在已经存在的表中使用ALTERTABLE语句添加约束,可以实施这些数据完整性约束。
第5章 完整性约束定义

2. 实体完整性
实体完整性是指保证表中所有的行唯一。实体完整性要求表中 的所有行都有一个唯一标识符。这个唯一标识符可能是一列, 也可能是几列的组合,称之为主键。也就是说,表中主键在所 有行上必须取值唯一。强制实体完整性的方法有:索引、 UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性 。
参照完整性也叫引用完整性。参照完整性总是保证主关键字 (被引用表)和外部关键字(引用表)之间的参照关系。它涉 及两个或两个以上表数据的一致性维护。
2
3. 参照完整性
5.4.2
数据完整性实施方法
1. 声明型数据完整性 声明型数据完整性一般在对象创建时定义,由SQL Server强制 实施,通常使用约束、缺省值和规则来实现。实现基本数据完 整性的首选方法是使用声明型数据完整性。 声明型数据完整性作为数据库对象说明的一部分在语法中实现, 在CREATE TABLE和ALTER TABLE定义中使用CONSTRAINT、 DEFAULT等语句限制表中的值。使用这种方法实现数据完整性 简单且不易出错,系统直接将实现数据完整性的要求定义在表 和列上。 过程型数据完整性是指由某个过程引发而实施的数据完整性。 一般先写出实施数据完整性的条件,再写出强制该条件所执行 的用于保证数据完整性的脚本。通常由触发器和存储过程实现。 过程型数据完整性也可以在客户机和服务器上使用其它编程语 言和工具实现。
3
2. 过程型数据完整性
5.4.3 约束
1.约束的定义和类型
约束是SQL Server提供的自动保持数据库完整性的一种方法 。
列级约束:列级约束是行定义的一部分,只能够应用在一列上。
表级约束:表级约束的定义独立于列的定义,可以应用在一个表 中的多列上。
SQL语言基础:SQL中的数据完整性约束用法

SQL语言基础:SQL中的数据完整性约束用法前言数据库的完整性是指数据库正确性和相容性,是防止合法用户使用数据库时向数据库加入不符合语义的数据,从而保证了数据库中的数据是正确的,避免非法的更新操作。
1、主键约束1.1 完整性约束条件完整性约束条件作用的对象有关系、元组、列三种。
1.2 完整性控制主要有三个方面的功能:定义功能、检测功能、处理功能。
检查是否违背完整性约束的时机有立即执行约束、延时执行约束。
最重要的完整性约束条件是实体完整性、参照完整性。
1.3 实体完整性 Primary Key在关系中只能有一个主键。
声明主键调入方法:•1、将 Primary Key 保留字加在属性类型之后。
比如 Sno char(10) Primary Key•2、在属性列表中引入一个新元素,该元素包含保留字Primary Key 和圆括号括起来的形成该键的属性或属性组列表。
比如:Primary Key (Sno)1.4 外键(Foreign Key)约束语法格式:Foreign Key (属性名) references 表名(属性名)[ON DELETE][CASCADE][SET NULL]说明:•Foreign Key 定义那些列为外码;•references 指明外码属于哪个表的主码;•ON DELETE CASCADE 指明删除记录同时删除关系中的记录;•SET NULL 表示置为空值方式。
比如:Foreign Key Sno references Student (Sno)1.5 属性值上的约束主要包括:•not null 不为空•unique 唯一约束•check 设定属性值需要满足的条件。
比如:age Number(3) check (age>0 and age <180)1.6 全局约束全局约束是值一些比较复杂的完整性约束,这些约束涉及多个属性间的联系或多个不同关系间的联系。
有基于元组的检查子句、断言。
SQL Server 数据库应用第五章

5.2 定义约束 约 CHECK约束(检查约束) 束 PRIMARY KEY约束(主键约束) 类 FOREIGN KEY约束(外键约束) 型
UNIQUE约束(唯一约束)
13
DEFAULT约束(缺省约束)
使用CREATE TABLE创建约束 CREATE TABLE table_name
(column_name data_type
主键
实体完整性还可以通过索引、 UNIQUE 约束或 指定IDENTITY 属性来实现
4
域完整性:是指表中对指定 列有效的输入值
限制数据类型
强制域 通过CHECK约束 有效性 规定 FOREIห้องสมุดไป่ตู้N KEY约束 的方法 可能 CHECK约束 值的 DEFAULT定义 范围 NOT NULL定义
0<= 学生成绩 <=100
19
此例子包含了所有的约束,但 运行结果出现错误提示,这是 由于还没有在数据库My_DB1中 创建外键约束FK_DeptCode所需 表departments
20
CREATE TABLE My_DB1. dbo.Departments ( DeptCode tinyint NOT NULL Primary Key, DeptName nchar(20) NOT NULL, TelCode char(8) NULL 创建表 ) Department
一级学科代码(加主键约束) 一级学科名称 二级学科代码(加主键约束) 二级学科名称
42
USE My_DB1 CREATE TABLE My_DB1. dbo.Subjects ( PrimaryCode tinyint NOT NULL, PrimaryName nvarchar(20) NULL,
完整性约束的SQL定义

完整性约束的SQL定义更新数据库时,表中不能出现不符合完整性要求的记录,以保证为⽤户提供正确、有效的数据。
实现该⽬的最直接的⽅法,是在编写数据库应⽤程序时,对每个更新操作都进⾏完整性检查。
但这种检查往往是复杂、重复、低效的。
SQL把各种完整性约束作为数据库模式定义的⼀部分,由数据库管理系统维护,这样即可有效防⽌对数据库的意外破坏,提⾼了完整性检测的效率,⼜减轻了编程⼈员的负担。
SQL Server⽀持三种完整性约束:1、实体完整性2、参照完整性(或引⽤完整性)3、⽤户⾃定义完整性1、实体完整性和主码实体完整性是通过主码(PRIMARY KEY)的定义来实现的。
⼀旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在表中不能出现主码值完全相同的两个记录。
主码可以在CREATE TABLE语句中使⽤PRIMARY KEY定义。
有两种定义主码的⽅法:⼀种是在属性后增加关键字,另⼀种是在属性表中加⼊额外的定义主码的⼦句:PRIMARY KEY(主码属性名表)。
(1)属性后增加关键字定义CREATE TABLE StudentInfo(StudentID char(8) PRIMARY KEY,StudentName varchar(10),StudentSex bit);(2)加⼊额外的定义主码的⼦句CREATE TABLE StudentInfo(StudentID char(8),StudentName varchar(10),StudentSex bit,PRIMARY KEY(StudentID));如果表的主码只含有单个属性,上⾯的两种⽅法都可以使⽤。
如果主码由多个属性组成,只能使⽤第⼆种⽅法。
除了主码,SQL提供了类似候选码的说明⽅法,使⽤关键字UNIQUE定义(与候选码不同的是:定义为UNIQUE的属性可以定义为空值,但只能有⼀个记录该属性的值为NULL),说明该属性(或属性组)的值不能重复。
数据定义完整性约束的实现

CREATE TABLE命令的基本格式
CREATE TABLE [schema_name].table_name ( { <column_definition> | <computed_column_definition> } [ <table_constraint> ] [ ,...n ] )
例5-2:定义职工表
职工表属于基础架构,包含仓库号、职工号、姓名、工资和班组长等5 个字段。其中职工号是主关键字,仓库号是外部关键字(参照仓库表的仓库 号字段值),职工的工资在1000到5000之间(默认是1200),班组长 字段值说明当前职工的班组长(直接领导)是谁(和职工号字段的值域相同, 参照本关系的职工号属性)。
[DEFAULT constant_expression ]
PRIMARY KEY和UNIQUE约束的区别?
如何实现候选关键字约束?
A
测试
部门号 部门名
B1
X
B
职工号 职工名 部门号
B2
Y
Z1 A
B1
B3
Z
禁止删除或更 新被参照记录
Z2
进行级联处理
C
B2
将参照记录的对
将参照记录的对应 字段设置为空值
应字段设置为默 认值
ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
上面这些短语说明,在被参照表的被参照记录上发生删除( DELETE ) 和更新( UPDATE )操作时的处理方式。
数据库系统概论第五章数据库的完整性PPT课件

02 数据完整性的实现方式
实体完整性
实体完整性定义
确保表中每条记录的唯一性,通常通过主键约 束来实现。
主键约束
主键是表中的一个或多个字段的组合,其值唯 一标识表中的每条记录。
主键的作用
确保表中数据的唯一性,防止重复记录的出现。
数据库完整性技术面临的挑战和机遇
数据量爆炸式增长
01
随着大数据时代的来临,数据库完整性面临数据量爆炸式增长
带来的存储、处理和管理挑战。
法规遵从与隐私保护
02
随着法规对数据保护的要求日益严格,数据库完整性需满足法
规遵从和隐私保护的需求。
技术创新与市场机遇
03
数据库完整性技术的发展将带来新的市场机遇,推动相关产业
参照完整性定义
维护数据库表之间的关系,确保引用数据的 一致性和准确性。
级联更新和删除
当父表中的数据发生变化时,自动更新或删 除子表中的相关数据。
外键约束
通过在子表中设置外键来引用父表的主键, 确保子表中数据与父表数据的一致性。
更新和删除规则
定义当父表中的数据发生变化时,如何处理 子表中的相关数据。
视图完整性
THANKS FOR WATCHING
感谢您的观看
视图完整性定义
基于一个或多个表的查询结果 集创建视图,并确保该结果集
的完整性。
视图的作用
提供了一个虚拟表,可以基于 现有表的数据进行查询和操作 。
视图的限制
通过在视图上定义约束来确保 数据的完整性和准确性。
视图与数据操作
对视图进行查询、更新、插入 和删除操作时,必须遵守视图
sql数据库完整性约束

5.3 FOREIGN KEY 约束
使用Transact-SQL语句设置外部键约束 ,其语法形式如下: CONSTRAINT constraint_name FOREIGN KEY(column_name[,…n]) REFERENCES ref_table [(ref_column[,…n])]
不包括在列定义中,通常用于对多个列一起进行约束,与列定义用“, ”分隔,定义表约束时必须指出要约束的那些列的名称。
完整性约束与对象 在SQL Server 2008中有6种约束和2种对象:
类型 约束关键字
PRIMARY KEY
名称
主键约束 惟一约束
外键约束 检查约束
描述
唯一标识每一行 防止非主键重复 定义值与同一个表或另一个表的 主键值匹配的一列或多列组合
);
在SQL Server管理平台中添加外部键约束:
约束检查的注意事项: 为约束指定有意义的名称 无需删除以及重新创建表,即可创建、更改或删除约束 在你的应用程序和事务中执行错误检查 禁用 CHECK 和 FOREIGN KEY 约束:
当运行大型批处理作业时提高性能
当向表中添加新的约束的时候避免检查已经存在的数据
数据类型上,则不允许该字段有默认约束。
5.5 DEFAULT 约束
使用SQL Server管理平台创建默认约束:
5.5 DEFAULT 约束
创建默认约束的Transact-SQL语句操作法。其语法形式如下:
• CONSTRAINT constraint_name DEFAULT constraint_expression [FOR
5.2 UNIQUE约束
创建惟一性约束的方法有两种:通过 SQL Server 管理平台可以完成 创建和修改惟一性约束的操作;使用 Transact-SQL 语句完成惟一性约束
SQL数据库创建表与完整性约束

示例
• 例2.为SC表添加“修课类别”列,此列的 定义为:XKLB char(4) ALTER TABLE SC ADD XKLB char(4) NULL
示例
• 例3.将新添加的XKLB的类型改为 char(6)。 ALTER TABLE SC ALTER COLUMN XKLB char(6)
约束定义
• ① 列取值非空约束
<列名> <类型> NOT NULL
例:sname char(10) NOT NULL
约束定义(续)
• ② 表主码约束
• 在定义列时定义主码(仅用于单列主码) 列定义 PRIMARY KEY 例: SNO char(7) PRIMARY KEY • 在定义完列时定义主码(用于单列或多列主 码) PRIMARY KEY (<列名序列>) 例: PRIMARY KEY(SNO) PRIMARY KEY(SNO,CNO)
约束定义(续)
• ⑤CHECK约束
• 格式:CHECK (约束表达式) • 例:定义成绩大于等于0。 CHECK ( grade >= 0 )
约束定义(续)
• ⑥UNIQUE约束
• 在列级约束定义(仅用于单列约束) 列定义 UNIQUE 例: SNAME char(7) UNIQUE • 在表级约束定义(用于单列或多列组合约束) UNIQUE (<列名序列>)
创建课程表
CREATE TABLE Course ( Cno char(10) NOT NULL, Cname char(20) NOT NULL, Ccredit tinyint CHECK (Ccredit > 0), Semester tinyint CHECK (Semester > 0), Period int CHECK (Period > 0), PRIMARY KEY(Cno) )
第5章数据库完整性约束总结

第5章数据库完整性约束总结数据库完整性约束是指对数据库中数据的完整性进行约束和验证,从而保证数据的准确性和一致性。
在数据库设计和管理中,完整性约束是非常重要的一部分。
本文将总结数据库完整性约束的相关内容。
一、数据库完整性约束的概念数据库完整性是指对数据库中存储的数据进行约束,以保证数据的正确性和一致性。
完整性约束是通过规定一系列的规则和条件来限制数据的输入和修改,以保证数据的完整性。
常见的完整性约束有实体完整性、域完整性、参照完整性、用户定义完整性等。
1.实体完整性:是指每个表中的记录都有唯一的标识符,不允许重复记录的存在。
实体完整性可以通过设置主键来实现,主键是唯一标识一条记录的字段或字段组合。
2.域完整性:是指数据库中每个字段的取值必须满足指定的规则和约束。
数据类型、长度、有效性等都是域完整性的一部分。
3.参照完整性:是指在关系数据库中建立表之间的关系时,要求所有的外键引用必须是有效的,即引用的主键值必须存在。
参照完整性可以防止无效的外键引用和数据的不一致。
4.用户定义完整性:是指用户可以根据自己的需求定义一些完整性约束,例如检查一些字段值的范围、格式等。
二、实现数据库完整性约束的方法在数据库中,可以通过以下方法来实现完整性约束。
1.主键约束:主键是唯一标识一个实体的字段或字段组合,可以通过设置主键来实现实体完整性。
主键约束要求主键的值不能重复,可以通过唯一索引或者唯一约束来实现。
2.唯一约束:唯一约束是指一个字段的值不能重复,可通过唯一索引或者唯一约束来实现。
3.非空约束:非空约束是指一个字段的值不能为空,可以通过设置字段的默认值或者非空约束来实现。
4.外键约束:外键是指一个表中的字段引用了另一个表的主键,可以通过外键约束来实现参照完整性。
外键约束要求外键引用的主键值必须存在,可以通过设置级联删除或者设置为空来处理引用的主键删除或修改的情况。
5.检查约束:检查约束是指限制字段值的取值范围,可以通过设置字段的数据类型和长度来实现。
第5章 数据完整性

第5章数据完整性【学习目标】Microsoft SQL Server 2005系统提供了一系列保证数据完整性的方法和机制,例如约束、默认值和规则等。
其中约束技术是应用最为广泛的保证数据完整性的方法。
本章将主要介绍有关数据库完整性的技术与方法。
本章学习要点:◆数据完整性的基本概念与类型◆约束的概念与类型◆默认值的概念与类型◆规则的概念与类型【学习导航】数据完整性是指数据库系统中数据在逻辑上的一致性和准确性,是保证数据库中数据质量的一种重要手段,是数据库设计好坏的一项重要指标,同时也是现代数据库系统的一个重要特征。
我们都有在网上注册帐户的经历,在注册信息的时候,我们经常会遇到用户名已经存在、密码少于规定的长度、电子邮件必填、出生日期有效、身份证号码是否正确等一系列的限制,实际上这些限制就是保证数据完整性的一些手段,主要的目的就是为了保证用户所填写的内容正确、有效。
本章主要内容见图5-1所示的学习导航。
图5-1 本章学习导航5.1 概述当对数据库进行一系列的操作后,如添加、修改、删除后,数据可能会出现被破坏或相关数据不一致的情况,那么如何防止和解决这些问题的出现呢?这不仅仅需要管理人员和操纵人员的认真和负责,更需要建立一个保障机制,要么防止这些问题发生,要么发生这些问题时可以及时地发现。
数据完整性就是解决这些问题的一种机制。
数据完整性就是指存储在数据库中的数据的一致性和准确性。
在评价数据库的设计时,数据完整性是数据库设计好坏的一项重要指标。
根据数据完整性机制所作用的数据对象和范围不同,数据完整性可以分为实体完整性、域完整性、参照完整性和用户定义完整性4种。
1.实体完整性实体完整性,也可以称为行完整性。
实体是指表中的记录,一个实体就是表中的一条记录。
实体完整性要求在表中不能存在完全相同的记录,而且要求每条记录都要具有一个唯一的标识符,这种标识符一般称为主键值。
这样就可以保证数据所代表的任何事物都不存在重复、可以区分。
第05章 SQL实施数据完整性

5.实施数据完整性本章主题●什么是数据完整性●数据完整性的实施形式●活用约束●CHECK约束●PRIMARY KEY 约束●UNIQUE约束●关系链和FOREIGN KEY约束●活用默认值●活用规则●完整性的检查次序让我们努力掌握这一章的精彩内容吧!!临渊羡鱼,不如退而结网。
5.1. 什么是数据完整性数据完整性(Data Integrity):代表数据的正确性、一致性与可靠性,实施数据完整性的目的在于确保数据的质量。
举2个例说明:身份证号不可重复、工资最低不能超过1500表格5-1 数据完整性类型数据完整性的类型实施此数据完整性的可用方法实体完整性(Entity Integrity)索引PRIMARY KEY约束UNIQUE约束IDENTITY属性域完整性(Domain Integrity)DEFAULT定义FOREIGH KEY约束CHECK约束NOT NULL定义规则引用完整性(Referential Integrity)FOREIGH KEY约束CHECK约束存储过程触发器用户定义完整性(User-Defined Integrity)CREATE TABLE命令语句中所有字段与表级的约束存储过程触发器实体完整性●实体完整性:要求表中每一条数据记录都是一个唯一的实体,也就是每一条数据记录必须拥有一个唯一标识。
●说白了:要求所有数据记录至少必须有一个字段或几个字段的组合的内容绝对不能发生重复的情况。
域完整性●域完整性:要求存入字段中的数据值必须符合特定的条件,以及决定字段是否允许接受NULL。
引用完整性●引用完整性:指当添加、修改或删除数据记录时,表间的关联性不可破坏。
用户定义完整性●泛指其他所有不属于前3种完整性的业务规则●该种业务规则无法利用前3种完整性来完成。
5.2. 数据完整性的实施形式两种实施形式:●声明式数据完整性:是将数据所需符合的条件融入到对象定义中。
✓特点1:通过直接针对表和字段定义声明的约束,可使声明式数据完整性成为数据库定义的一部分。
数据库技术中的数据完整性约束(五)

数据完整性约束是数据库技术中非常重要的一环。
它能够保证数据库中的数据准确、一致和可靠,从而确保数据库系统的正确性和可信度。
在这篇文章中,我们将探讨数据完整性约束的定义、类型以及在实际应用中的重要性。
1. 定义数据完整性约束指的是对数据库中的数据进行约束和限制,以确保数据的准确性和一致性。
通过定义和实施数据完整性约束,可以防止不符合事务要求或业务规则的数据被插入、修改或删除。
2. 类型数据完整性约束可以分为以下几种类型:实体完整性约束实体完整性约束是指对数据库中的实体对象的约束,确保每个实体具有唯一性。
例如,对于一个学生表,可以通过指定学生ID字段为主键,来保证每个学生有唯一的ID。
域完整性约束域完整性约束保证数据在一定的范围内,符合业务要求。
例如,对于学生成绩表,可以限制成绩字段的取值范围在0到100之间。
参照完整性约束参照完整性约束用于确保外键的有效性。
在关系型数据库中,可以通过引用主键来确保外键引用的表中存在对应的记录。
例如,如果有一个订单表和一个客户表,可以通过外键约束确保每个订单必须关联一个有效的客户。
用户定义完整性约束用户定义完整性约束是指根据具体业务规则定义的约束条件。
通过用户定义完整性约束,可以适应不同业务需要。
例如,对于一个邮寄地址表,可以定义一个用户定义完整性约束,确保邮政编码必须符合特定的格式。
3. 重要性数据完整性约束在数据库系统中具有重要的意义:数据准确性数据完整性约束能够确保数据的准确性。
它可以防止非法、无效或不一致的数据被插入或修改,从而保证数据的准确性和可信度。
业务规则数据完整性约束可以根据业务规则定义和实施约束条件。
通过数据完整性约束,可以确保数据库中存储的数据满足业务规则的要求,从而提高系统的可用性和可靠性。
数据一致性数据完整性约束可以保证数据库中的数据一致性。
通过定义合适的完整性约束,可以确保数据在不同的表之间保持一致,并防止数据冲突和不一致的情况发生。
保护数据安全数据完整性约束可以防止非法操作和恶意篡改数据。
第05章 SQL数据定义与完整性约束的实现详述

数量 INT CONSTRAINT num CHECK (数量>=0),
PRIMARY KEY (订购单号,序号) )
19
北京信息科技大学
修改表结构
ALTER TABLE [schema_name.]table_name { ALTER COLUMN column_name <data_type> [ NULL | NOT NULL ] | ADD <column_definition> | <computed_column_definition> | <table_constraint> | DROP [ CONSTRAINT ] constraint_name | COLUMN column_name }
[ schema_name . ] referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
ALTER TABLE 基础Байду номын сангаас职工 ADD CONSTRAINT ref_wh FOREIGN KEY (仓库号) REFERENCES 仓储.仓库(仓库号) ON DELETE SET NULL ON UPDATE CASCADE
22
北京信息科技大学
例5-10:增加和删除字段。
为订购明细表增加一个完成日期字段: ALTER TABLE 订货.订购明细 ADD 完成日期 datetime
第5章 实现数据完整性约束(07-04)

5.3 实现过程完整性
• 过程完整性是指在服务器端通过编写实现 约束的一段代码来实现数据完整性约束, 这段代码就称为触发器。 • 触发器是用编程的方法实现复杂的商业规 则,它可以实现一般的数据完整性约束实 现不了的复杂的完整性约束。
• 声明完整性不提供数据库间的引用完整性。
5.3.1 事务基本概念
5.3.3 SQL Server触发器
• SQL Server提供以下两种触发方式: 理过所有约束后激活触发器,这种方式称做后触发。 如果触发操作违反约束条件,将导致事务回滚,这时就不会执行后 触发器。但在视图上不能采用后触发方式定义触发器。 替代触发:指定执行触发器而不是执行触发 SQL语句(INSERT、 UP DATE或DELETE ),从而替代触发语句的操作。 在表或视图上,每个 Insert、Update 或 Delete语句最多可以定 义1个 INSTEAD OF 触发器,但可以在每个具有INSTEAD OF 触发器 的视图上定义视图。 后触发:在触发操作(INSERT、 UPDATE或DELETE)执行完成,并处
1.主码约束
例:对雇员表和工作表添加主码约束
ALTER TABLE 雇员表 ADD CONSTRAINT PK_EMP PRIMARY KEY (雇员编号) ALTER TABLE 工作表 ADD CONSTRAINT PK_JOB PRIMARY KEY (工作编号)
2.UNIQUE约束
• 用于限制在一个列中不能有重复的值。 • 作用于具有惟一性的属性列上。 • 注意: • 在一个表中可以定义多个UNIQUE约束; • 可以在一个列或多个列上定义UNIQUE约束。
表中删除,并传输到DELETED表中。DELETED表和触
[SQL]基本表的定义及其完整性约束
![[SQL]基本表的定义及其完整性约束](https://img.taocdn.com/s3/m/264e71d76037ee06eff9aef8941ea76e58fa4a03.png)
[SQL]基本表的定义及其完整性约束在使⽤数据库时,绝⼤多数时间都是在使⽤基本表。
SQL Server数据类型创建基本表基本格式如下:create table <表名>(<列名1> <数据类型> [<列级完整性约束条件>],……<列名n> <数据类型> [<列级完整性约束条件>][, <表级完整性约束条件>])如果完整性约束涉及到多个属性列,则必须定义在表级上,否则可以定义在列级或表级。
如下创建⼀个Persons基本表:use test -- 在该数据库中创建基本表gocreate table Persons(Id_P int primary key, -- Id_P为主键LastName nvarchar(20),FirstName nvarchar(20),Address nvarchar(50),City nvarchar(10))go完整性约束完整性约束的⽤途是限制输⼊到基本表中的值的范围,SQL的完整性约束可分为列级完整性约束和表级完整性约束:列级完整性约束:针对关系属性值的限定条件,只能应⽤在⼀列上表级完整性约束:涉及关系中的多个属性的限制条件,可以应⽤在⼀个基本表中的多个列上。
如果完整性约束涉及到多个属性列,则必须定义在表级上,否则可以定义在列级或表级。
当创建完整性约束之后,它作为基本表定义的⼀部分,存⼊数据字典中。
pri m ary key约束主键(primary key)约束是实体完整性约束,primary key⽤于定义主键,它保证主键的唯⼀性与⾮空性。
⼀个基本表的主键由⼀列或者⼏列构成,可以定义在列级或者表级上,但是不能在两个级别上进⾏定义。
定义主键约束的⽅法如下:1. primary key之间写在列名及其数据类型之后。
例如:create table test(col_name int primary key,……)2. 按照语法在相应的列名及其数据类型后单独列出:constraint <约束名> primary key约束名就是主键的名字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
列名 数据类型 是否允许空值 CREATE TABLE [schema_name].table_name 主关键字约束 ( { <column_definition> | <computed_column_definition> } 唯一性约束 [ <table_constraint> ] [ ,...n ] ) 参照完整性约束 域完整性约束 column_name <data_type> [ NULL | NOT NULL ] 定义默认值 [ [ CONSTRAINT constraint_name ]
在一个表中只能定义一个主关键字, 其他具有候选关键字特征的字段应 该定义非空值和唯一性约束。
14
例5-4:定义库存表
库存表属于包含仓库号、器件号和数量等3个字段 。其中仓库号参照仓库关系的仓库号,器件号参照器件 关系的器件号,主关键字由仓库号和器件号构成,库存 数量应该大于等于0。
15
例5-4:定义库存表
CREATE TABLE 仓库 ( 仓库号 CHAR(6) PRIMARY KEY, 城市 CHAR(10), 面积 INT CHECK (面积 > 0) )
பைடு நூலகம் 例5-2:定义职工表
职工表包含仓库号、职工号、姓名、工资和班组 长等5个字段。其中职工号是主关键字,仓库号是外部 关键字(参照仓库表的仓库号字段值),职工的工资 在1000到5000之间(默认是1200),班组长字段 值说明当前职工的班组长(直接领导)是谁(和职工 号字段的值域相同,参照本关系的职工号属性)。
列的定义 (<column_definition>)
PRIMARY KEY和UNIQUE约束的区别?
计算列的定义
CREATE TABLE table_name ( { <column_definition> | <computed_column_definition> } [ <table_constraint> ] [ ,...n ] ) column_name AS computed_column_expression [ PERSISTED [ NOT NULL ] ][ [ CONSTRAINT constraint_name ] { PRIMARY KEY | UNIQUE } | [ FOREIGN KEY ] REFERENCES referenced_table_name [ ( ref_column ) ] [ ON DELETE { NO ACTION | CASCADE } ] [ ON UPDATE { NO ACTION } ] | CHECK ( logical_expression ) ]
字段名 学号 姓名 性别 民族 籍贯 政治面貌 出生日期 专业 系编号 字段类型 字符串 字符串 字符串 字符串 字符串 字符串 日期/时间 字符串 字符串 长度 15 10 2 10 10 20 是否为空 否 是 是 是 是 是 是 是 否 主键 √
20 8
课堂练习一
创建表
2. 在jxgl数据库中有6个数据表,依次为:教师、课程、 学生、院系、成绩、授课,请分别完成下列各题的操 作。 (2)使用SQL语句创建“院系”表,其表结构见表1-2。
一个表由若干列构成,在SQL Server 2005/2008中可以 理解:
<column_definition> <computed_column_definition> <table_constraint>
定义实列(简称列,column_definition) 定义虚列(即计算列,computed_column_definition)
例5-8:删除职工表上定义的约束ref_wh。
ALTER TABLE 职工 DROP CONSTRAINT ref_wh
经手人 CHAR(8) NOT NULL foreign key REFERENCES 职工(
职工号), 供货方 CHAR(5) NULL foreign key REFERENCES 供应商(供应 商号), 订购日期 DATETIME DEFAULT getdate(), 金额 MONEY NULL)
19
例5-7:定义订购明细表。
订购明细表包含订购单号、序号、器件号、单价和数量
等5个字段。其中主关键字由订购单号和序号共同构成;订 购单号字段参照订购单关系的订购单号字段;器件号参照器 件表的器件号字段;序号为大于等于1的整数;数量为大于 等于0的整数。
20
例5-7:定义订购明细表。
CREATE TABLE 订购明细( 订购单号 CHAR(5) FOREIGN KEY REFERENCES 订购单 ON DELETE CASCADE ON UPDATE CASCADE, 序号 SMALLINT CHECK (序号>=1), 器件号 CHAR(6) FOREIGN KEY REFERENCES 器件, 单价 SMALLMONEY, 数量 INT CONSTRAINT num CHECK (数量>=0), PRIMARY KEY (订购单号,序号) )
段和“课程编号”字段的外键约束。其表结构见表1-5。
字段名 学号 课程编号 字段类型 字符串 字符串 长度 15 15 是否为空 否 否 主键 √ √
二、修改表结构
ALTER TABLE table_name { ALTER COLUMN column_name <data_type> [ NULL | NOT NULL ] | ADD <column_definition> | <computed_column_definition> | <table_constraint> | DROP [ CONSTRAINT ] constraint_name | COLUMN column_name } • ALTER COLUMN修改已有列的定义,但是只能修改为兼容数据 类型或重新定义是否允许空值; • ADD新列、计算列或表级约束; • DROP删除约束或删除列。
PRIMARY KEY | UNIQUE | [ FOREIGN KEY ] REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ] [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] | CHECK ( logical_expression ) ] [DEFAULT constant_expression ]
11
例5-2:定义职工表
CREATE TABLE 职工( 仓库号 CHAR(6) CONSTRAINT ref_wh FOREIGN KEY REFERENCES 仓库(仓库号), 职工号 CHAR(8) PRIMARY KEY, 姓名 CHAR(10), 工资 numeric(8,2) CHECK (工资>= 1000 AND 工资<= 5000) DEFAULT 1200, 班组长 CHAR(8) FOREIGN KEY REFERENCES 职工(职工号) )
供应商表包含供应商号、供应商名和地址等3个字
段。其中供应商号是主关键字。
CREATE TABLE 供应商( 供应商号 CHAR(5) PRIMARY KEY, 供应商名 CHAR(20), 地址 CHAR(20))
17
例5-6:定义订购单表。
订购单表包含订购单号、经手人、供货方、订购日期和
金额等5个字段。其中订购单号是主关键字;经手人是负责
21
课堂练习一 创建数据库
1. 创建教学信息管理数据库(jxgl),其主数据文件名为 jxgl_data,初始大小为5M,每次增加1M;日志文 件名为jxgl_log,初始大小为2M,每次增加10%。 数据库的物理文件保存在d:\sqlserver目录中。
课堂练习一 创建表
2. 在jxgl数据库中有6个数据表,依次为:教师、课程、 学生、院系、成绩、授课,请分别完成下列各题的 操作。 (1)使用SSMS创建“学生”表,其表结构见表1-1。
该订购单的职工号,它参照职工关系的职工号字段,该字段
不允许为空值(强制联系);供货方是接受该订购单的供应
商号,它参照供应商关系的供应商号字段,该字段可以为空 值(非强制联系);订购日期的默认值是系统的当前日期。
18
例5-6:定义订购单表。
CREATE TABLE 订购单( 订购单号 CHAR(5) PRIMARY KEY,
表级约束
如果某个完整性约束与多个列相关,则这样 的完整性约束不能定义在单个列上,这时候 就需要表级完整性约束。
单个列上的完整性约束也可以用表级完整性 约束的形式来定义。 在定义表时,需要先定义被参照表,然后定 义参照表。
仓储订货数据库
例5-1:定义仓库表
仓库表包含仓库号、城市和面积等3个字段。 其中仓库号是主关键字,仓库的面积值是大于0 的整数。
CREATE TABLE 库存( 仓库号 CHAR(6) FOREIGN KEY REFERENCES 仓库, 器件号 CHAR(8) FOREIGN KEY REFERENCES 器件, 数量 INT CHECK (数量>=0), PRIMARY KEY(仓库号,器件号))
16
例5-5:定义供应商表
第5章 数据定义完整性约束的实现
5.1 SQL的表定义和完整性定义功能(重点掌握 )
5.2 SQL数据操作与完整性约束的作用(重点掌握 )
建立数据库(回顾第2章)