数据完整性 基础知识

实体完整性<?XML:NAMESPACE PREFIX = O />

实体完整性将行定义为特定表的唯一实体。实体完整性通过索引、UNIQUE 约束、PRIMARY KEY 约束或 IDENTITY 属性强制表的标识符列或主键的完整性。

域完整性

域完整性指特定列的项的有效性。您可以强制域完整性限制类型(通过使用数据类型)、限制格式(通过使用 CHECK 约束和规则)或限制可能值的范围(通过使用 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。

引用完整性

在输入或删除记录时,引用完整性保持表之间已定义的关系。在 SQL Server 2005 中,引用完整性通过 FOREIGN KEY 和 CHECK 约束,以外键与主键之间或外键与唯一键之间的关系为基础。引用完整性确保键值在所有表中一致。这类一致性要求不引用不存在的值,如果一个键值发生更改,则整个数据库中,对该键值的所有引用要进行一致的更改。
强制引用完整性时,SQL Server 将防止用户执行下列操作:
<!--[if !supportLists]-->·         <!--[endif]-->在主表中没有关联的记录时,将记录添加或更改到相关表中。
<!--[if !supportLists]-->·         <!--[endif]-->更改主表中的值,这会导致相关表中生成孤立记录。
<!--[if !supportLists]-->·         <!--[endif]-->从主表中删除记录,但仍存在与该记录匹配的相关记录。

用户定义完整性

用户定义完整性使您可以定义不属于其他任何完整性类别的特定业务规则。所有完整性类别都支持用户定义完整性。这包括 CREATE TABLE 中所有列级约束和表级约束、存储过程以及触发器。

数据约束

SQL Server 2005 提供了下列机制来强制列中数据的完整性:

PRIMARY KEY 约束

表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。
一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束
         创建:
ALTER TABLE TableName ADD CONSTRAINT TableName _pk PRIMARY KEY (Id)
         删除:
ALTER TABLE TableName DROP CONSTRAINT TableName _pk

FOREIGN KEY 约束

外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。
在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。
FOREIGN KEY 约束并不仅仅可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过组成 FOREIGN KEY 约束的所有值的验证。若要确保验证了组合 FOREIGN KEY 约束的所有值,请将所有参与列指定为 NOT NULL。
         创建:
ALTER TABLE TableName
ADD CONSTRAINT TableName _fk1
FOREIGN KEY (FKId)
REFERENCES PrimarKeyTable (Id)
         删除:
ALTER TABLE TableName
DROP CONSTRAINT TableName _fk1

UNIQUE 约束

可以使用 UNIQUE 约束确保在非主键列中不输入重复的值。尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。
可以对一个表定义多个 UNIQUE 约束,但只能定义一个 PRIMARY KEY 约束。
而且,UNIQUE 约束允许 NULL 值,这一点与 PRIMARY KEY 约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一个空值。
FOREIGN KEY 约束可以引用 UNIQUE 约束。
         创建:
ALTER TABLE TablenName ADD CONSTRAINT ConstraintName UNIQUE (Column2,Column3)
         删除:
ALTER TABLE TablenName DROP CONSTRAINT ConstraintName

CHECK 约束

通过限制列可接受的值,CHECK 约束可以强制域的完整性。此类约束类似于 FOREIGN KEY 约束,因为可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGN KEY 约束从其他表获得有效值列表,而 CHECK 约束通过不基于其他列中的数据的逻辑表达式确定有效值。例如,可以通过创建 CHECK 约束将 salary 列中值的范围限制为从 $15,000 到 $100,000 之间的数据。这将防止输入的薪金值超出正常的薪金范围。
CHECK 约束不接受计算结果为 FALSE 的值。因为空值的计算结果为 UNKNOWN,所以表达式中存在这些值可能会覆盖约束。例如,假设对 int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值 10(即 MyColumn = 10)。如果将值 NULL 插入到 MyColumn,SQL Server 2005 Database Engine 将插入 NULL 且不返回错误。
如果 CHECK 约束检查的条件对于表中的任何行都不是 FALSE,它将返回 TRUE。如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效。这种情况可能会产生意外结果,如下面的示例所示。
         创建:
ALTER TABLE TablenName ADD CONSTRAINT ConstraintName CHECK (Column2>Column3)
         删除:
ALTER TABLE TablenName DROP CONSTRAINT ConstraintName

DEFAULT 定义

记录中的每列均必须有值,即使该值是 NULL。可能会有这种情况:必须向表中加载一行数据但不知道某一列的值,或该值尚不存在。如果列允许空值,就可以为行加载空值。由于可能不希望有可为空的列,因此最好是为列定义 DEFAULT 定义(如果合适)。例如,通常为数值列指定零作为默认值,为字符串列指定 N/A 作为默认值。
将某行加载到某列具有 DEFAULT 定义的表中时,即隐式指示 SQL Server 2005 Database Engine 将默认值插入到没有指定值的列中
         创建:
ALTER TABLE doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b  
         删除:
ALTER TABLE doc_exz DROP CONSTRAINT col_b_def

允许空值

列的为空性决定表中的行是否可为该列包含空值。空值(或 NULL)不同于零 (0)、空白或长度为零的字符串(如 "")。NULL 的意思是没有输入。出现 NULL 通常表示值未知或未定义。
         设置为非空:alter table MyTable modify Column2 varchar(20) not null;
         设置为空:alter table MyTable modify Column2 varchar(20) null;

转载于:https://blog.51cto.com/liweibird/139806

SQL 数据完整性 基础知识相关推荐

  1. SQL数据库基础知识-巩固篇一

    SQL数据库基础知识-巩固篇<一>... 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用了> MySQL-57 D ...

  2. SQL Server基础知识概念要点详细讲解

    SQL Server基础知识概念要点详细讲解 目录 基础概念 1.网状模型数据库 2.层次模型数据库 3.关系模型数据库 知识点实例总结 基础概念 SQL语言中,between and表示包括两边参数 ...

  3. SQL数据库基础知识巩固

    SQL数据库基础知识 数据库,又称"电子化的文件柜",是"按照数据结构来组织.存储和管理数据的仓库",是一个长期存储在计算机内的.有组织的.可共享的.统一管理的 ...

  4. SQL注入基础知识总结

    SQL注入-基础知识总结 1.注释符 1.1.Mysql中注释符有三种 1.2.总结 2.information_schema库 2.1.了解information_schema库 2.2.常用注入语 ...

  5. SQL入门基础知识详解

    ////// 导读:科学技术的快速发展正在改变我们的社会,也在不经意间改变着未来人们的职业规划.据媒体预测,数据分析将是未来最重要的工作技能之一.或许不久的将来,一家企业中80%的岗位,都需要数据分析 ...

  6. 数据分析必备——SQL入门基础知识

    数据说·梦想季 一直很喜欢一句话:山鸟与鱼不同路,从此山水不相逢.意思就是如果你现在不够优秀,即使遇见了,也不配拥有-...努力是唯一的方向! // 导读:科学技术的快速发展正在改变我们的社会,也在不 ...

  7. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  8. 一文搞懂 SQL:基础知识和业务实践总结

    作者:cooperyjli,腾讯 CDG 数据分析师 SQL的全称是Structured Query Language(结构化查询语言),是一种古老而简洁的程序设计语言.看似平平无奇,一直被各种吐槽, ...

  9. mysql数据库语言_mysql数据库sql语句基础知识

    1.数据库操作 查看当前数据库 SELECT DATABASE(); 显示用户名,数据库版本 SELECT user(), version(); 创建库 CREATE DATABASE[ IF NOT ...

最新文章

  1. DL框架之AutoKeras框架:深度学习框架AutoKeras框架的简介、特点、安装、使用方法详细攻略
  2. oracle dg 搭建方式,Linux平台 Oracle 11g DG测试环境快速搭建参考
  3. 一款App基于mPaaS小程序如何进行改造?
  4. python—os模块、时间模块
  5. eclipse maven 导出项目依赖的jar包
  6. 3.2 GUN as汇编(本文内容大部分引用原文,非原创)
  7. [转]@html.ActionLink的几种参数格式
  8. 向量数量积公式_向量的数量积公式大全
  9. 微软云服务器的优点,探寻:微软私有云的优势究竟是什么
  10. git提交代码时遇到代码库有更新以及本地有更新的解决方法
  11. 地图服务 纬度、经度对应坐标轴x,y
  12. Codeforces Round #393 Frodo and pillows
  13. JAVA学习笔记(6)——接口与多态
  14. 如何保存google的壁纸
  15. web linux 桌面,Ubuntu无桌面进行Web浏览器测试
  16. Genome Aggregation Database (gnomAD) 简介 | 参考人群等位基因频率数据库
  17. R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function)
  18. Centos查看磁盘占用,管理磁盘空间
  19. spring boot 2.1.5 @WebFilter 自己使用的问题
  20. 国产数据库岁末大盘点

热门文章

  1. 厉害!冬奥首金选手都来自这所高校!还全是研究生!
  2. OpenAI开放GPT-3微调功能,一行命令就能实现!正确率最高提升4倍
  3. 屠榜多目标跟踪!华科amp;港大提出ByteTrack:基于数据关联方法BYTE的跟踪器
  4. 【硬核】自己动手实现轻量级神经网络推理框架
  5. 谷歌大脑联手Hinton提出SimCLR新框架,疯狂提升自监督学习性能 | 北邮毕业生一作...
  6. 清华寒门女孩毕业感言爆火:世界本不公平,你有多努力,就有多特殊!
  7. “老赖”罗永浩:就算“卖艺”也会还债!孙宇晨:我买!
  8. 牛逼了!这个私藏的前端 IDE 插件,撸码 6 的飞起,编程效率提高 30 倍!
  9. celery源码分析-worker初始化分析(下)
  10. Linux之绝对路径和相对路径