目录

  • 前言
  • 一、实体完整性
    • (一)主键约束(PRIMARY KEY约束)
      • 1、创建表时创建主键约束
      • 2、修改表时创建主键约束
      • 3、删除创建的主键约束
    • (二)唯一性约束(UNIQUE约束)
      • 1、创建表时创建唯一性约束
      • 2、修改表时创建唯一性约束
      • 3、删除创建的唯一性约束
  • 二、参照完整性
    • (一)创建表时创建外键约束
      • 1、创建表时定义列级外键约束
      • 2、创建表时定义表级外键约束
    • (二)修改表时创建外键约束
    • (三)删除表间的参照关系
  • 三、域完整性
    • (一)检查约束(CHECK约束)
      • 1、创建表时创建CHECK约束
      • 2、修改表时创建CHECK约束
      • 3、删除创建的CHECK约束
    • (二)默认约束(DEFAULT约束)
      • 1、创建表时创建DEFAULT约束
      • 2、修改表时创建DEFAULT约束
      • 2、删除创建DEFAULT约束
  • 结语

前言

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

一、实体完整性

实体完整性是通过主键约束唯一性约束等等来实现,即要求表中有一个主键,其值不能为空且能唯一标识相对应的记录。例如员工表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外键约束,通过外键约束可以定义表与表之间的关系,即使用主键约束和唯一性约束定义主表的主键和唯一键,使用外键约束定义从表的外键,即可实现两个表之间的参照完整性

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

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

三、域完整性

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

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

1、创建表时创建CHECK约束

格式如下:

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

例、创建员工表Employee_0,并对性别列设置CHECK约束,要求性别只能为男或者女生。
只需在Sex列的后面加上CHECK((Sex='男') OR (Sex='女'))
sql语句:

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列设置默认约束为男。

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

2、删除创建DEFAULT约束

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

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

结语

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

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

  1. 传感器原理与检测技术复习笔记第六章-压电式传感器

    第六章 压电式传感器 文章目录 第六章 压电式传感器 工作原理 压电效应 正压电效应 逆压电效应 压电材料 石英晶体(单晶体) 压电陶瓷(多晶体) 压电式传感器等效电路 压电式传感器的测量电路 压电元 ...

  2. SQL Server笔记心得(持续更新)

    SQL Server笔记 一.数据库基础 二.企业管理器 三.查询分析器 四.SQL Server 数据管理 五.数据基本查询 六.数据高级查询 七.连接查询 八.查询的实际应用 一.数据库基础 1. ...

  3. 2.SQL SERVER笔记——SQL SERVER系统概念

    2.SQL SERVER笔记--SQL SERVER系统概念 系统数据库 数据库管理员(DBA)的一项基本的技能是对SQL数据库引擎的系统数据库的深刻理解.数据库开发人员了解SQLSERVER自带的系 ...

  4. 把Oracle数据库移植到Microsoft SQL Server 7 0

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 把Ora ...

  5. sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户

    2015年计算机四级数据库复习要点:SQL Server 登录账户 系统内置的登录账户 1. BUILTIN\Administrators:是一个Windows组账户,表示所有的Windows Adm ...

  6. C#连接4种类型数据库(Access、SQL Server、Oracle、MySQL)

    C#连接4种类型数据库(Access.SQL Server.Oracle.MySQL) 1.C#连接连接Access using System.Data; using System.Data.OleD ...

  7. mysql数据库的分离_数据库分离和附加 (SQL Server)

    数据库分离和附加 (SQL Server)Database Detach and Attach (SQL Server) 06/30/2020 本文内容 适用于:Applies to: SQL Ser ...

  8. C# SQL Server笔记

    第一章 认识C#程序 1. namespace关键字: Namespace(命名空间)是C#中组织代码的方式,他的作用类似于java中的package(包)这样我门就可以把紧密相关的一些代码放在同一个 ...

  9. mysql bak 还原数据库文件格式_Navicat操作SQL server 2008R2文件.bak文件还原

    项目操作过程中,利用Navicat操作SQL Server2008R2数据备份,结果发现数据丢失了很多,不得不先对数据丢失部分进行差异对比,然后再重新输入. 1.利用Navicat导出的数据格式为sq ...

最新文章

  1. JSP标签JSTL(4)--URL
  2. 【话题】产品经理如何排期rd任务,才能更好控制产品节奏
  3. flume-elasticsearch-sink indexName
  4. python:how does subclass call baseclass's __init__()
  5. 如何将低压精密运算放大器的性能扩展到高压高侧电流检测应用(高电流电阻采集电压电路图及误差分析)
  6. mysql受影响的行 0_为什么更新/删除成功时受影响的行返回0?
  7. linux c++ queue 多线程,C++多线程,消息队列用法
  8. 聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法
  9. rails用generate为两个模型创建has_and_belongs_to_many中间表
  10. 计算机基础思维导图_超级简单的实操示范,教你零基础带孩子玩转风靡全球的思维导图...
  11. 语义化标签——HTML
  12. 归并排序执行次数_一文了解C/C++经典排序算法
  13. JAVA基础0307
  14. 火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界
  15. cisco路由器如何查看内网流量情况
  16. Android 5.1-7.1 高通驱动修改 - 上篇
  17. 【- Light 计划 -】新建了一台Linux云服务器我该干嘛
  18. 武汉2022专技公需课必修答案
  19. PA1--实现基础设施、表达式求值和监视点
  20. 一文读懂什么是智能制造,企业又该如何实施智能制造?

热门文章

  1. 精致全景图 | 程序是如何运行起来的
  2. 原来这样调优可以攻破MySQL性能瓶颈
  3. Java集合框架:总结
  4. 音视频技术开发周刊 | 150
  5. 毕业五年的音视频开发工程师过得怎么样了?
  6. 蔡砚刚:uAVS3对标x265 veryslow将节省30%码率
  7. Java多线程之多线程工程代码编写思维方式
  8. 重磅独家 | 腾讯AI Lab AAAI18现场陈述论文:用随机象限性消极下降算法训练L1范数约束模型
  9. Nginx学习之三-ngx_http_request_t结构体
  10. Undefined Reference to Typeinfo