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

合集下载

实验五 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章sql数据库完整性约束
CHECK约束是限制用户输入某一列的数据取值,即该 列只能输入一定范围的数据。 CHECK约束可以作为表定义的一部分在创建表时创建, 也可以添加到现有表中。表和列可以包含多个CHECK约束。 允许修改或删除现有的CHECK约束。 在现有表中添加CHECK约束时,该约束可以仅作用于 新数据,也可以同时作用于已有的数据。默认设置为 CHECK约束同时作用于已有数据和新数据。当希望现有数 据维持不变,则使用约束仅作用于新数据选项。
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章 完整性约束定义

第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中的数据完整性约束用法

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 数据库应用第五章

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把各种完整性约束作为数据库模式定义的⼀部分,由数据库管理系统维护,这样即可有效防⽌对数据库的意外破坏,提⾼了完整性检测的效率,⼜减轻了编程⼈员的负担。

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),说明该属性(或属性组)的值不能重复。

数据定义完整性约束的实现

数据定义完整性约束的实现
6
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 )操作时的处理方式。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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章)
相关文档
最新文档