SQL Server数据库采用的是关系数据模型,而关系数据模型本身的优点之一就是模型本身集成了数据完整性。作为模型一部分而实施的数据完整性(例如在创建数据表时的列属性定义)称作为声明式(Declarate)数据完整性。用代码来实施的数据完整性(例如存储过程、触发器等)称为过程式(procedural)数据完整性

  以下介绍几种声明式约束概要知识:

一:主键约束(Primary Key Constraints)

  主键约束实施行的唯一约束,同时不允许行的属性为null值。约束属性中,每一记录行只能在数据表中出现一次。换而言之,表内的每行数据可以被唯一确定。

  约束的创建

    1:主键约束只能在数据表中创建一次;

    2:不能再属性为允许NULL值得列上创建主键约束。

  创建方法

    1:创建表时在数据列上声明

      create table temp1 (row_id int identity(1,1) not null primary key);

    2:创建表后增加约束

      alter table temp1 add constraint PK_temp1 primary key(row_id );

  为了实施逻辑主键的唯一约束,SQL Server 会在后台创建一个唯一索引(Unique Index)。唯一索引是SQL Server实施唯一约束而采用的一种物理机制。

二:唯一约束(Unique Constraints)

  唯一约束用来保证数据行的一个列(或一组列)数据的唯一。

  约束的创建

    1:与主键约束不同,同一张数据表上可以创建多个唯一约束;

    2:唯一约束可以定义在NULL值列上;

    3:目前SQL Server 只支持在唯一约束列中,只能有一个列为NULL值列

  创建方法:

    alter table temp1 add constraint UC_temp1 unique (row_id);

  与主键约束一样,在创建唯一约束后,SQL Server会创建唯一索引以实施逻辑唯一约束的物理机制。

三:外键约束(Foreign Key Constraints)

  外键约束用于实施引用完整性。外键约束在引用表(referencing table )的一组属性上进行定义,且指向被引用表(referenced table)中的一组候选键(主键或唯一约束)。外键约束的目的是将外键列的值域控制在被引用列中现有的值。

  约束的创建:

    1:引用表和被引用表可以是同一张数据表;

    2:即使被引用的候选键不允许NuLL值,在外键中也可以允许为NULL值;

    3:可以在引用表上定义具有级联功能的外键。其目的是,当在对被引用表中的数据行进行删除(Delete)或更新(Update)操作时,可以自动对引用表中自动进行删除(Delete)或更新(Update)相关的数据行。

  创建方法:

    例如:在表A的ID列上定义一个外键约束,让它指向表B中的row_id 列

    Alter table A add constraint FK_A_ID Foreign key (ID) references B(row_id) [on delete cascade on update cascade];
    注:on delete 和 on update 为可选的定义选项,可定义的操作分为 CASCADE、Set Default、Set Null三种。

      cascade:操作(更新或删除)将被级联到引用表中相关数据行;

      set default:将更新引用表中相关数据行的值为默认值;

      set  null:将更新引用表中相关数据行的值为null值

  外键约束实施的引用操作成为“禁止操作(no action)”。禁止操作的含义为:当试图删除被引用表中的数据行或更新被引用表中的候选键时,如果在引用表中存在相关的数据行,则不允许此操作执行。

四:检查约束(Check Constraint) 

  检查约束用于定义在表中插入或更新一行数据之前必须满足的一个谓词(Check Expression) 。

  约束的创建

    当谓词返回的逻辑结果为False时,SQL Server将阻止本次对数据表的新增或更新操作;当谓词返回的逻辑结果为TRUE或者UNknown时,本次操作通过。

  创建方法

    Alter table temp1 add constraint CK_temp1 check (row_id <10000);  ----检查数据列 row_id,使其值不能大于10000

五:默认约束(Default Constraint)

  默认约束用来设置数据列的默认值。当对数据表新增一行记录时,如果没有为属性显示指定明确的值,默认约束将会为其自动设定为默认值。

  创建方法:

    Create table temp2(date1 datetime);  ---创建表Temp2

    ALter table temp2 add constraint DK_temp2 default (getdate()) for date1;  ---设置数据列 date1的默认值为当前服务器时间

    

SQL Server 数据完整性的实现——约束的更多相关文章

  1. SQL Server中使用Check约束提升性能

        在SQL Server中,SQL语句的执行是依赖查询优化器生成的执行计划,而执行计划的好坏直接关乎执行性能.     在查询优化器生成执行计划过程中,需要参考元数据来尽可能生成高效的执行计划, ...

  2. sql server删除主键约束所想到的

    从网上找到了下面一段代码: declare @Pk varchar(100);select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('表 ...

  3. [置顶] T-sql sql server 设置主键约束、标示列、唯一约束、默认值、约束、创建表

    ----选择数据库 use ythome go ----查看表是否存在 if Exists ( select * from sysobjects where name='sys_menu' and t ...

  4. SQL Server查看表的约束

    sysobjects是系统自建的表,里面存储了在数据库内创建的每个对象,包括约束.默认值.日志.规则.存储过程等. SELECT * FROM sysobjects WHERE OBJECT_NAME ...

  5. SQL Server 禁止和启用约束

    Alter Table XXX nocheck constraint xxx Alter Table XXX check constraint xxx

  6. Sql Server约束的学习一(主键约束、外键约束、唯一约束)

    一.约束的分类 1.实体约束 实体约束是关于行的,比如某一行出现的值不允许出现在其他行,例如主键约束. 2.域约束 域约束是关于列的,对于所有行,某一列有那些约束,例如检查约束. 3.参照完整性约束 ...

  7. SQL Server中有关约束(constraint)的一些细节

    本文出处:http://www.cnblogs.com/wy123/p/7350265.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  8. 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

  9. sql server 2008 数据库的完整性约束

    一.数据库完整性概述   1.数据库的完整性:   ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真实地反映现实世界   例:  学 ...

随机推荐

  1. 性能测试-实例讲解VU、RPS、RT公式换算

    概述 今天看到一篇文章讲解VU.RPS.RT,中间有一个公式如下图 并发数 = RPS * 响应时间  于是我在本地做了几次实验,试图验证一下公式的准确性 实验网站 www.baidu.com 第一次 ...

  2. Neo4j电影关系图

    “电影关系图”实例将电影.电影导演.演员之间的复杂网状关系作为蓝本,使用Neo4j创建三者关系的图结构,虽然实例数据规模小但五脏俱全. 步骤: 一. 创建图数据:将电影.导演.演员等图数据导入Neo4 ...

  3. Mllib数据类型(密集向量和稀疏向量)

    1.局部向量 Mllib支持2种局部向量类型:密集向量(dense)和稀疏向量(sparse). 密集向量由double类型的数组支持,而稀疏向量则由两个平行数组支持. example: 向量(5.2 ...

  4. Spring Bean 的装配方式

    Spring Bean 的装配方式 装配 Bean 的三种方式 一个程序中,许多功能模块都是由多个为了实现相同业务而相互协作的组件构成的.而代码之间的相互联系又势必会带来耦合.耦合是个具有两面性的概念 ...

  5. html css 布局小细节

    学了两个月的html和css每天都重复一样的生活,敲着大同小异的代码,这样的生活枯燥无味.我腻了,我也累了!小米首页算是我写的第三个静态页面,写了好久,很多细节都把握不好,下面的这个简单的布局细节是我 ...

  6. javascript之正则表达式(一)

    正则表达式:定义一套规则,检查字符串的用的.换句话说,就是记录文本规则的代码.适用于进行文字匹配工具,例如:(1)测试字符串的某个模式(2)替换文本(3)根据模式匹配从字符串中提取一个子字符串.语法: ...

  7. GeoPackage - 一个简便轻量的本地地理数据库

    GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件.与操作系统无关的地理数据库. 当前标准是1.2.1,该版本的html版说明书:https://www.geopackag ...

  8. JVM调优之探索CMS和G1的物理内存归还机制

    前言: 公司有一个资产统计系统,使用频率很低,但是要求在使用时查询速度快,因此想到做一些缓存放在内存中,在长时间没有使用,持久化到磁盘中,并对垃圾进行回收,归还物理内存给操作系统,从而节省宝贵资源给其 ...

  9. 给hexo添加宠物

    开始 之前在博客园上看到,公告栏里有人竟然在养鱼,觉得很好玩!一直念念不忘的,于是就想着在hexo中也来养几只,因为我用的事Next的Muse主题,所以有一个非常合适的侧边栏,先来看看效果. 点击此处 ...

  10. ArcGIS API For JavaScript 开发(五)要素图层的编辑

    2018-4-3 这篇博客主要讲述要素的层的编辑功能,是基于FeatureLayer的applyEdit方法.由于自己目前正在学习当中,有许多不足之处请各位指出,欢迎指导学习! 主要功能是 1.将地图 ...