数据库原理与应⽤(SQLServer)笔记第六章数据完整性
⽬录
前⾔
本次内容,我们主要掌握数据库的数据完整性,将从三个⽅⾯主要介绍实体完整性、参照完整性和域完整性。
⼀、实体完整性
实体完整性是通过主键约束和唯⼀性约束等等来实现,即要求表中有⼀个主键,其值不能为空且能唯⼀标识相对应的记录。例如员⼯表Employee,EmpNo列为主键,根据每个员⼯的EmpNo列可以唯⼀确定该员⼯的相应⾏记录信息,通过EmpNo列建⽴主键约束实现员⼯表Employee的实体完整性。
(⼀)主键约束(PRIMARY KEY约束)
通过T-SQL语句进⾏以下操作:
1、创建表时创建主键约束
若⼀个表的主键由单列组成,则可定义为该列的列级约束或表级约束;若主键由两个或两个以上的列组成,则必须定义为表级约束。
(1)定义列级约束
格式如下:
(约束名称)
/*若不指定约束的名称,系统会⾃动⽣成名称*/
PRIMARY KEY(CLUSTERED/NONCLUSTERE)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(2)定义表级约束
格式如下:
(约束名称)
/*若不指定约束的名称,系统会⾃动⽣成名称*/
PRIMARY KEY(CLUSTERED/NONCLUSTERE)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2,...约束n)
例1、创建员⼯表YGGZ_Employee,对员⼯号EmpNo列创建指定约束名称的列级PRIMARY KEY约束。
sql语句:
2、修改表时创建主键约束
修改表时创建主键约束使⽤ALTER TABLE语句中的ADD⼦句。
格式如下:
ALTER TABLE<;表的名称>
ADD(CONSTRAINT约束名称)PRIMARY KEY
/*若不指定约束的名称,系统会⾃动⽣成名称*/
(CLUSTERED/NONCLUSTERE)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2,...约束n)
3、删除创建的主键约束
删除表时创建主键约束使⽤ALTER TABLE语句中的DROP⼦句。
格式如下:
ALTER TABLE<;表名>
DROP CONSTRAINT(约束1,约束2,...约束n)
例2、对创建的员⼯表YGGZ_Employee,删去部门编号的主键,对员⼯⼯号列创建PRIMARY KEY约束,且约束名称为
PK_EmpNo。
sql语句:
--修改约束和删除约束 USE YGGZ ALTER TABLE YGGZ_Employee ADD CONSTRAINT PK_EmpNo PRIMARY KEY (EmpNo) /*修改对员⼯⼯号列创建PRIMARY KEY约束*/ GO ALTER TABLE YGGZ_Employee DROP CONSTRAINT PK_EmpNo /*删除所创建的PRIMARY KEY约束*/
(⼆)唯⼀性约束(UNIQUE约束)
唯⼀性约束指定⼀个或多个列的组合的值具有唯⼀性,防⽌在列中输⼊重复的值,为表中的⼀列或者
多列提供实体完整性。与主键约束的区别是唯⼀性约束可以指定的列为空值,⽽唯⼀性约束的列值不允许为空值,且⼀个表可以创建多个唯⼀性约束,但主键约束只能有⼀个。
通过T-SQL语句进⾏以下操作:
1、创建表时创建唯⼀性约束
(1)定义列级唯⼀性约束
语句格式:
(CONSTRAINT约束名称)
/*若不指定约束的名称,系统会⾃动⽣成名称*/
UNIQUE(CLUSTERED/NONCLUSTERED)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(2)定义表级唯⼀性约束
当应⽤于多列时要定义表级约束。
(CONSTRAINT约束名称)
/*若不指定约束的名称,系统会⾃动⽣成名称*/
UNIQUE(CLUSTERED/NONCLUSTERED)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2,...约束n)
2、修改表时创建唯⼀性约束
修改表时创建唯⼀性约束使⽤ALTER TABLE语句中的ADD⼦句。
格式如下:
ALTER TABLE<;表的名称>
ADD(CONSTRAINT约束名称)UNIQUE
/*若不指定约束的名称,系统会⾃动⽣成名称*/
(CLUSTERED/NONCLUSTERED)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2,...约束n)
3、删除创建的唯⼀性约束
删除所创建的唯⼀性约束使⽤ALTER TABLE语句中的DROP⼦句。
格式如下:
ALTER TABLE<;表名>
DROP CONSTRAINT(约束1,约束2,...约束n)
⼆、参照完整性
外键⽤于与另外⼀个数据表的关联,是确定另⼀个表的字段,例如有两个表分别是基本表A和信息表B,其中C是表A的主键,⽽表B中也有C字段,则我们称C就是B的外键,所以外键的作⽤就是来维护多个表之间数据的⼀致性。
FOREIGN KEY外键约束,通过外键约束可以定义表与表之间的关系,即使⽤主键约束和唯⼀性约束定义主表的主键和唯⼀键,使⽤外键约束定义从表的外键,即可实现两个表之间的参照完整性。
创建唯一约束sql语句(⼀)创建表时创建外键约束
1、创建表时定义列级外键约束
语句格式:
(CONSTRAINT约束名称)
FOREIGN KEY
REFERENCES<;表的名称>
2、创建表时定义表级外键约束
语句格式:
(CONSTRAINT约束名称)
FOREIGN KEY(列1,列2,列3...)
REFERENCES<;表的名称>
(ON DELETE(CASCADE/NO ACTION))
/*指定采⽤DELETE语句进⾏删除操作,CASCADE表⽰当删除主键表中某⾏时,外键表中相应⾏也删除;NO ACTION表⽰当删除主键表中某⾏时,删除语句终⽌*/
(ON UPDATE(CASCADE/NO ACTION))
/*指定采⽤UPDATE语句进⾏更新操作,CASCADE表⽰当更新主键表中某⾏时,外键表中相应⾏也更新;NO ACTION表⽰当更新主键表中某⾏时,更新语句终⽌*/
(⼆)修改表时创建外键约束
使⽤ALTER TABLE 的ADD⼦句修改表时创建外键约束。
语句格式:
ALTER TABLE<;表的名称>
ADD(CONSTRAINT约束名称)UNIQUE
/*若不指定约束的名称,系统会⾃动⽣成名称*/
(CLUSTERED/NONCLUSTERED)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2,...约束n)
例、根据所给表结构,在数据库Sales中创建员⼯表Employee_0。
sql语句:
(三)删除表间的参照关系
使⽤ALTER TABLE 的DROP⼦句删除所创建的外键约束。
语句格式:
ALTER TABLE<;表名>
DROP CONSTRAINT(约束1,约束2,...约束n)
例、对创建的员⼯表YGGZ_Employee,删去对EmyNo列定义的FK_EmyNo外键约束。
sql语句:
ALTER TABLE YGGZ_Employee DROP CONSTRAINT FK_EmyNo
三、域完整性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论