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.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真实地反映现实世界 例: 学 ...
随机推荐
- 网页内嵌html遇到的问题
在项目中遇到个问题 充值功能是点击一个按钮这个按钮会弹出模态框,输入充值金额会执行一段脚本自动提交数据到https://openapi.alipay.com/gateway.do上 结果:本网页跳转到 ...
- java开发---关于ORA00604和ORA12705
MyEclipse和oracle连接中出现的一个问题: 在使用工具连接orcale数据库时报了这两个异常 ORA-00604和ORA12705 ; 查找问题原因: 大概猜测是与字符集有关系 , 确认 ...
- 关键字static、final
final final能修饰类.修饰方法.能修饰属性. 修饰类:该类不能被继承. 修饰方法:该方法不能被重写.所以abstract和final不能同时用 修饰属性/变量:该属性/变量为常量,该值不能再 ...
- 自定义View之开关
资源文件 首先我们需要有两个图片文件,分别是开关的背景和开关的滑块 自定义View 1.写一个类继承View 2.copy该类的全路径名在布局文件使用, 3.找到这个控件,设置初始信息 4.根据需求绘 ...
- cve-2018-14515复现
一.环境 Windows NT WIN-RRI9T9SN85D 6.1 build 7600 (Windows 7 Business Edition) i586 Apache/2.4.23 (Win3 ...
- MetInfo5.3管理员密码重置漏洞
点击忘记密码 下一步 输入已知用户名或者邮箱点击下一步用Burp拦截 右键发送到Repeater 在第一行php后面拼接?met_host虚拟机kali的ip地址:端口号拼接完成后 用虚拟机监听拼接的 ...
- centOS7 安装mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
在虚拟机上安装mysql走了不少弯路,在此备份... 首先感谢下这几篇博客提供的帮助: https://www.cnblogs.com/pythonal/p/6141516.html http://b ...
- 第一章jQuery基础
一.jQuert简介 1.什么是jQuery jQuery是javaScript的程序库之一,它是javaScript对象和实用函数的封装. jQuery是继Prototype之后又一个优秀的java ...
- spark 源码分析之二十一 -- Task的执行流程
引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及St ...
- 10w数组去重,排序,找最多出现次数(精华)
package cn.tedu.javaweb.test; import java.util.*; /* * @author XueWeiWei * @date 2019/6/11 8:19 */@S ...