SQL Server 数据完整性的实现——约束
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 数据完整性的实现——约束的更多相关文章
- SQL Server中使用Check约束提升性能
在SQL Server中,SQL语句的执行是依赖查询优化器生成的执行计划,而执行计划的好坏直接关乎执行性能. 在查询优化器生成执行计划过程中,需要参考元数据来尽可能生成高效的执行计划, ...
- sql server删除主键约束所想到的
从网上找到了下面一段代码: declare @Pk varchar(100);select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('表 ...
- [置顶] T-sql sql server 设置主键约束、标示列、唯一约束、默认值、约束、创建表
----选择数据库 use ythome go ----查看表是否存在 if Exists ( select * from sysobjects where name='sys_menu' and t ...
- SQL Server查看表的约束
sysobjects是系统自建的表,里面存储了在数据库内创建的每个对象,包括约束.默认值.日志.规则.存储过程等. SELECT * FROM sysobjects WHERE OBJECT_NAME ...
- SQL Server 禁止和启用约束
Alter Table XXX nocheck constraint xxx Alter Table XXX check constraint xxx
- Sql Server约束的学习一(主键约束、外键约束、唯一约束)
一.约束的分类 1.实体约束 实体约束是关于行的,比如某一行出现的值不允许出现在其他行,例如主键约束. 2.域约束 域约束是关于列的,对于所有行,某一列有那些约束,例如检查约束. 3.参照完整性约束 ...
- SQL Server中有关约束(constraint)的一些细节
本文出处:http://www.cnblogs.com/wy123/p/7350265.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)
在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...
- sql server 2008 数据库的完整性约束
一.数据库完整性概述 1.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真实地反映现实世界 例: 学 ...
随机推荐
- Leetcode多线程题库练习(新功能尝鲜)& 个人感悟
大家好, 我是方子龙.很久没有自己写文章了. 一面是因为工作上的需求开发任务比较重,下班回家基本上就躺床玩几把王者,度过闲暇时光. 二面是一有点时间就自己主动地去看书和学习,知道自己还缺少很多知识,由 ...
- Excel公式中问题-记住不要忽略空格!
总结一下之前犯得愚蠢的小问题: 程序:每日报表:从DB下载数据填充到excel,包括3个sheet,sheet1:总结<模板,公式填充,数据源为sheet2,sheet3>;sheet2: ...
- 比赛:小奔的矩形solution
分析: 交叉相乘,然后除以最大公因数(为了减少爆常数的可能性std做了两次,数据很大),得到的两个数相加减二就是答案 代码: var p,q,n,m,a,b,i:int64; begin readln ...
- python 中_init_函数以及参数self
1)class类包含: 类的属性:类中所涉及的变量 类的方法:类中函数 2)_init_函数(方法) 1.首先说一下,带有两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问. 2. ...
- Asp.Net Core SwaggerUI 接入
Asp.Net Core SwaggerUI 接入 简单了解 swagger的目的简单来说就是,不用为每个接口手动写接口文档,因为它是根据接口自动生成的,接口更改时文档也同步更新,减少了手动更新的麻烦 ...
- 简单题[期望DP]
也许更好的阅读体验 \(\mathcal{Description}\) 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌 ...
- [opengl] 画一个可移动的自行车 二维几何变换(平移、旋转、缩放)
#include <cmath> #include "glut.h" #include "iostream" using namespace std ...
- Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
一.什么是 ES Nested 嵌套 Elasticsearch 有很多数据类型,大致如下: 基本数据类型: string 类型.ES 7.x 中,string 类型会升级为:text 和 keywo ...
- python的socket模块
sk.bind(address) s.bind(address) 将套接字绑定到地址.address地址的格式取决于地址族.在AF_INET下,以元组(host,port)的形式表示地址. sk.li ...
- 【CodeForces - 357B】Flag Day(水题)
Flag Day Descriptions 小G请你对 n 个点进行染色,可选的颜色有三种:白.红.蓝,并使得给定的 m 个三元组中,每个点的颜色各不相同. 因为你可能不会三分图匹配,于是小G给出了更 ...