数据库原理与应用(SQL Server)笔记 第六章 数据完整性
目录
- 前言
- 一、实体完整性
- (一)主键约束(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)笔记 第六章 数据完整性相关推荐
- 传感器原理与检测技术复习笔记第六章-压电式传感器
第六章 压电式传感器 文章目录 第六章 压电式传感器 工作原理 压电效应 正压电效应 逆压电效应 压电材料 石英晶体(单晶体) 压电陶瓷(多晶体) 压电式传感器等效电路 压电式传感器的测量电路 压电元 ...
- SQL Server笔记心得(持续更新)
SQL Server笔记 一.数据库基础 二.企业管理器 三.查询分析器 四.SQL Server 数据管理 五.数据基本查询 六.数据高级查询 七.连接查询 八.查询的实际应用 一.数据库基础 1. ...
- 2.SQL SERVER笔记——SQL SERVER系统概念
2.SQL SERVER笔记--SQL SERVER系统概念 系统数据库 数据库管理员(DBA)的一项基本的技能是对SQL数据库引擎的系统数据库的深刻理解.数据库开发人员了解SQLSERVER自带的系 ...
- 把Oracle数据库移植到Microsoft SQL Server 7 0
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 把Ora ...
- sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户
2015年计算机四级数据库复习要点:SQL Server 登录账户 系统内置的登录账户 1. BUILTIN\Administrators:是一个Windows组账户,表示所有的Windows Adm ...
- C#连接4种类型数据库(Access、SQL Server、Oracle、MySQL)
C#连接4种类型数据库(Access.SQL Server.Oracle.MySQL) 1.C#连接连接Access using System.Data; using System.Data.OleD ...
- mysql数据库的分离_数据库分离和附加 (SQL Server)
数据库分离和附加 (SQL Server)Database Detach and Attach (SQL Server) 06/30/2020 本文内容 适用于:Applies to: SQL Ser ...
- C# SQL Server笔记
第一章 认识C#程序 1. namespace关键字: Namespace(命名空间)是C#中组织代码的方式,他的作用类似于java中的package(包)这样我门就可以把紧密相关的一些代码放在同一个 ...
- mysql bak 还原数据库文件格式_Navicat操作SQL server 2008R2文件.bak文件还原
项目操作过程中,利用Navicat操作SQL Server2008R2数据备份,结果发现数据丢失了很多,不得不先对数据丢失部分进行差异对比,然后再重新输入. 1.利用Navicat导出的数据格式为sq ...
最新文章
- JSP标签JSTL(4)--URL
- 【话题】产品经理如何排期rd任务,才能更好控制产品节奏
- flume-elasticsearch-sink indexName
- python:how does subclass call baseclass's __init__()
- 如何将低压精密运算放大器的性能扩展到高压高侧电流检测应用(高电流电阻采集电压电路图及误差分析)
- mysql受影响的行 0_为什么更新/删除成功时受影响的行返回0?
- linux c++ queue 多线程,C++多线程,消息队列用法
- 聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法
- rails用generate为两个模型创建has_and_belongs_to_many中间表
- 计算机基础思维导图_超级简单的实操示范,教你零基础带孩子玩转风靡全球的思维导图...
- 语义化标签——HTML
- 归并排序执行次数_一文了解C/C++经典排序算法
- JAVA基础0307
- 火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界
- cisco路由器如何查看内网流量情况
- Android 5.1-7.1 高通驱动修改 - 上篇
- 【- Light 计划 -】新建了一台Linux云服务器我该干嘛
- 武汉2022专技公需课必修答案
- PA1--实现基础设施、表达式求值和监视点
- 一文读懂什么是智能制造,企业又该如何实施智能制造?
热门文章
- 精致全景图 | 程序是如何运行起来的
- 原来这样调优可以攻破MySQL性能瓶颈
- Java集合框架:总结
- 音视频技术开发周刊 | 150
- 毕业五年的音视频开发工程师过得怎么样了?
- 蔡砚刚:uAVS3对标x265 veryslow将节省30%码率
- Java多线程之多线程工程代码编写思维方式
- 重磅独家 | 腾讯AI Lab AAAI18现场陈述论文:用随机象限性消极下降算法训练L1范数约束模型
- Nginx学习之三-ngx_http_request_t结构体
- Undefined Reference to Typeinfo