sql server 2008 数据库的完整性约束
一、数据库完整性概述
DBMS应提供定义数据库完整性约束条件,并把它们存入数据库中。
检查数据是否满足完整性约束条件的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查。
DBMS若发现用户的操作违背了完整性约束条件,就采取一定的动作以保证数据的完整性,如拒绝执行该操作,或级联执行其他操作。

二、缺省(默认值)和规则
缺省和规则来源于由Sybase开发的S默认值QL Server,在老版本的SQL Server或者升级版本中都有缺省和规则的使用。
缺省与规则有以下特点:
(1)缺省与规则是数据库对象,它们是独立于表和列而建立的。
(2)缺省与规则建立后与列或数据类型产生关联,列和数据类型就具有了缺省与规则的属性。
(3)缺省与规则定义后,可以重复使用,可以绑定到多个列或数据类型上。
(4)缺省与规则不随表同时调入内存,当用到时才被调入内存,这可能会使程序执行出现延时。
缺省和规则对象通常只在它所创建的数据库中有效,不是ANSI标准,一般不提倡使用。
应尽可能使用约束,任何可以使用缺省与规则的地方都有可以使用约束。
1. 缺省
可以使用CREATE DEFAULT语句创建默认对象。其语法格式如下:
CREATE DEFAULT default AS constant_expression
例如: create default d_grade as 1
默认对象创建后不能使用,必须首先将其绑定到某列或者用户自定义的数据类型上。其使用语法格式如下:
sp_bindefault [@defname = ] 'default', [@objname = ] 'object_name' [, [@futureonly = ] 'futureonly_flag']
其中: [, [@futureonly = ] ‘futureonly_flag’]仅在此之后将默认值绑定到用户定义的数据类型时才使用。
例如: exec sp_bindefault 'd_grade', ‘sc.grade'
解除绑定可以使用sp_unbindefault存储过程。其语法格式如下:
sp_unbindefault [@objname = ] 'object_name'
例如: exec sp_unbindefault ‘sc.grade'
在删除默认对象之前,首先要确认默认对象已经解除绑定。删除默认对象使用DROP DEFAULT语句。其语法格式如下:
DROP DEFAULT {default} [,…n]
例如: drop default d_grade
2.规则
CREATE RULE rulename AS condition_expression
其中各参数含义如下:
例如:create rule r_grade as @grade<=100 and @grade>=0
sp_bindrule [@rulename = ] 'rulename', [@objname = ] ‘object_name’
例如: exec sp_bindrule 'r_grade','sc.grade‘
sp_unbindrule [@objname = ] 'object name' [,[@futureonly = ] 'futureonly_ lag']
例如:
exec sp_unbindrule 'sc.grade'
④删除规则
首先要解除规则的绑定,然后才能删除绑定
例如:drop rule r_grade
三、约束
CONSTRAINT <完整性约束条件名>[PRIMARY KEY短语|FOREIGN KEY 短语|CHECK短语]
CREATE TABLE Student2(
sno int CONSTRAINT C1 CHECK (sno BETWEEN 10000 AND 99999),
sname CHAR(8) CONSTRAINT C2 NOT NULL,
sage int CONSTRAINT C3 CHECK (sage<30),
ssex VARCHAR(2) CONSTRAINT C4 CHECK (ssex IN ('男', '女')),
CONSTRAINT SK PRIMARY KEY(Sno)
);
sql server 2008 数据库的完整性约束的更多相关文章
- 如何转换SQL Server 2008数据库到SQL Server 2005
背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...
- SQL SERVER 2008数据库各版本功能对比
微软SQL SERVER 2008数据库有6个版本,分别是数据中心版.企业版.标准版.Web版.工作组版.简易版,有时候购买的时候或需要使用某项功能时,需要了解各个版本的区别,功能差异,很多时候,大部 ...
- 通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...
- SQL Server 2008 数据库镜像部署实例之三 配置见证服务器
SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...
- SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移
SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移 上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据 ...
- SQL Server 2008 数据库镜像部署实例之一 数据库准备
SQL Server 2008 数据库镜像部署实例之一 数据库准备 一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动 ...
- SQL Server 2008 数据库同步的两种方式 (发布、订阅)
参考转载: SQL Server 2008 数据库同步的两种方式 (发布.订阅) 使用Sqlserver事务发布实现数据同步
- [转]实战 SQL Server 2008 数据库误删除数据的恢复
实战 SQL Server 2008 数据库误删除数据的恢复 关键字:SQL Server 2008, recover deleted records 今天有个朋友很着急地打电话给我,他用delete ...
- 还原或删除sql server 2008数据库时,经常烩出现: “因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案
还原或删除sql server 2008数据库时,经常烩出现: “因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案如下 关键SQL语句: ALTER DATABASE [dateba ...
随机推荐
- 问题解决——在结构体中使用set保存结构体数据
=====================声明========================== 本文原创,转载请明确的注明出处和作者,并保持文章的完整性(包括本声明部分). 本文链接:http:/ ...
- 问题解决——SolidWorks 已停止工作 (Windows7 + SolidWorks 2010 SP0.0)
给同事的SolidWorks解决问题时偶然间发现的. -------------------------------------------------------------- 本文原创,转载请注明 ...
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
- map学习笔记
collection是单列集合,map是双列集合.其中包含<k,v>键值对,注意:键具有唯一性,而值不唯一. 在此列举三个读取方式:keyset,valueset,及entryset. k ...
- jstat使用
jstat -gcutil pid 统计gc信息统计.其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间.
- 项目管理工具Redmine各功能测试
Redmine 是一个开源的.基于Web的项目管理和缺陷跟踪工具.它用日历和甘特图辅助项目及进度可视化显示.同时它又支持多项目管理.Redmine是一个自由开放 源码软件解决方案,它提供集成的项目 ...
- eclipse点击一个变量使相同名称变量高亮显示的方法
preferences->java->Editor->Mark Occurences 选择最上的复选框,下面的就有很多了. 其中的Local variables就是变量的高亮显示.
- docker下部署gitlab
docker用来隔离应用还是很方便的,一来本身的操作较为简单,二来资源占用也比虚拟机要小得多,三来也较为安全,因为像数据库这样的应用不会再全局暴露端口,同时应用间的通信通过加密和端口转发,更加安全. ...
- apply,call,bind的区别
apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...
- StackBlur.js
StackBlur.js 是 Mario Klingemann 创建的一个快速的.接近高斯模糊的效果库. 更多信息: http://incubator.quasimondo.com/processin ...