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)
);
最新文章
- Sort Methods
- C++重要知识点小结---2
- archlinux locale-gen 命令出错
- 你不需要jQuery
- Scut 上线后遇到的问题
- ie8如何支持html5
- PDF模板报表导出(Java+Acrobat+itext)
- 浅谈Android系统的图标设计规范
- js音乐播放器
- Bluez SPP实现代码分析(转)
- 从零开始学习前端开发 — 17、CSS3背景与渐变
- 谈一谈CloudBlog的系统架构
- 基于 CODING 的 Spring Boot 持续集成项目
- sql的日期和时间函数–date_format
- 让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean
- js中对URL进行转码与解码
- django错误笔记(xadmin)——AttributeError: &#39;Settings&#39; object has no attribute &#39;TEMPLATE_CONTEXT_PROCESSORS&#39;
- jQuery()方法的第二个参数
- [转]2017年最具价值的十大开源项目!GitHub 年度报告~
- 《Linux内核分析与设计》读书笔记二