数据库原理与应用(SQL Server)笔记 第六章 数据完整性

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 数据库原理与应用(SQL Server)笔记 第六章 数据完整性

前言


本次内容,我们主要掌握数据库的数据完整性,将从三个方面主要介绍实体完整性、参照完整性和域完整性。


一、实体完整性


实体完整性是通过主键约束和唯一性约束等等来实现,即要求表中有一个主键,其值不能为空且能唯一标识相对应的记录。例如员工表Employee,EmpNo列为主键,根据每个员工的EmpNo列可以唯一确定该员工的相应行记录信息,通过EmpNo列建立主键约束实现员工表Employee的实体完整性。

1667036024193.jpg

(一)主键约束(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约束。

1667036083009.jpg

sql语句:

1667036092766.jpg


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约束*/

1667036135712.jpg


(二)唯一性约束(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外键约束,通过外键约束可以定义表与表之间的关系,即使用主键约束和唯一性约束定义主表的主键和唯一键,使用外键约束定义从表的外键,即可实现两个表之间的参照完整性。


(一)创建表时创建外键约束


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。

1667036309385.jpg

sql语句:

1667036319072.jpg


(三)删除表间的参照关系


使用ALTER TABLE 的DROP子句删除所创建的外键约束。

语句格式:

ALTER TABLE <表名>
  DROP CONSTRAINT (约束1,约束2,...约束n)


例、对创建的员工表YGGZ_Employee,删去对EmyNo列定义的FK_EmyNo外键约束。

sql语句:

ALTER TABLE YGGZ_Employee DROP CONSTRAINT FK_EmyNo


三、域完整性


(一)检查约束(CHECK约束)


CHECK约束为输入列或整个表中的值设置条件,从而限制输入的值,从而保证数据完整性。以下通过使用T-SQL语句。


1、创建表时创建CHECK约束


格式如下:

(CONSTRAINT 约束名称)
CHECK (逻辑表达式)
/*此处逻辑表达式为检查约束的表达式*/


例、创建员工表Employee_0,并对性别列设置CHECK约束,要求性别只能为男或者女生。

只需在Sex列的后面加上CHECK((Sex='男') OR (Sex='女'))。

sql语句:

1667036380692.jpg


2、修改表时创建CHECK约束


使用ALTER TABLE 的ADD子句在修改表时创建CHECK约束。

语句格式:

ALTER TABLE <表的名称>
  ADD (CONSTRAINT <约束的名称>) CHECK (逻辑表达式)


例、在员工表Employee,修改年龄列设置CHECK约束,要求出生年龄在2001-01-01之前。

ALTER TABLE Employee ADD CHECK(Birthday<2001-01-01)



3、删除创建的CHECK约束


使用ALTER TABLE 的DROP子句删除所创建的CHECK约束。

语句格式:

ALTER TABLE <表的名称>
  DROP CONSTRAINT <约束的名称>


(二)默认约束(DEFAULT约束)


默认约束,即当数据表某列未指定数据时,系统会自动设置默认值。默认值可以是表达式,可以是常量,也可以是NULL值。


1、创建表时创建DEFAULT约束


例1、对数据库YGGZ,创建Employee_0表,其中对Sex列设置默认约束为男。

1667036429545.jpg


2、修改表时创建DEFAULT约束


使用ALTER TABLE 的ADD子句在修改表时创建DEFAULT约束。

语句格式:

ALTER TABLE <表的名称>
  ADD DEFAULT <表达式等等> FOR <列名>


例2、对数据库YGGZ中的Employee_0表上的Sex列创建DEFAULT约束为男。

sql语句:

ALTER TABLE Employee_0 ADD DEFAULT '男' FOR Sex


3、删除创建DEFAULT约束


使用ALTER TABLE 的DROP子句删除所创建DEFAULT约束。

语句格式:

ALTER TABLE <表的名称>
  ALTER COLUMN <列名> DROP DEFAULT


结语


以上就是本次数据库原理与应用的全部内容,篇幅较长,感谢您的阅读和支持,若有表述或代码中有不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
13天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
14天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
15天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
21天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
25天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
18 2
|
30天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
|
1月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
1月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
14天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
16天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
30 4
下一篇
无影云桌面