- 浏览: 31231 次
- 性别:
- 来自: 北京
最新评论
约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。
1 主关键字约束
主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。
定义主关键字约束的语法如下:
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
(column_name1[, column_name2,…,column_name16])
各参数说明如下:
constraint_name
指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。
CLUSTERED | NONCLUSTERED
指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。
column_name
指定组成主关键字的列名。主关键字最多由16 个列组成。
例7-3: 创建一个产品信息表,以产品编号和名称为主关键字
create table products (
p_id char(8) not null,
p_name char(10) not null ,
price money default 0.01 ,
quantity smallint null ,
constraint pk_p_id primary key (p_id, p_name)
) on [primary]
2 外关键字约束
外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。
定义外关键字约束的语法如下:
CONSTRAINT constraint_name
FOREIGN KEY (column_name1[, column_name2,…,column_name16])
REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ] ]
[ NOT FOR REPLICATION ]
各参数说明如下:
REFERENCES
指定要建立关联的表的信息。
ref_table
指定要建立关联的表的名称。
ref_column
指定要建立关联的表中的相关列的名称。
ON DELETE {CASCADE | NO ACTION}
指定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的删除操作回滚。NO ACTION 是缺省值。
ON UPDATE {CASCADE | NO ACTION}
指定在更新表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的更新操作回滚。NO ACTION 是缺省值。
NOT FOR REPLICATION
指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。
例7-4:创建一个订货表,与前面创建的产品表相关联
create table orders(
order_id char(8),
p_id char(8),
p_name char(10) ,
constraint pk_order_id primary key (order_id) ,
foreign key(p_id, p_name) references products(p_id, p_name)
) on [primary]
注意:临时表不能指定外关键字约束。
惟一性约束
惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL 属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16 个列组成。
定义惟一性约束的语法如下:
CONSTRAINT constraint_name
UNIQUE [CLUSTERED | NONCLUSTERED]
(column_name1[, column_name2,…,column_name16])
例7-5:定义一个员工信息表,其中员工的身份证号具有惟一性。
create table employees (
emp_id char(8),
emp_name char(10) ,
emp_cardid char(18),
constraint pk_emp_id primary key (emp_id),
constraint uk_emp_cardid unique (emp_cardid)
) on [primary]
7.2.4 检查约束
检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。
定义检查约束的语法如下:
CONSTRAINT constraint_name
CHECK [NOT FOR REPLICATION]
(logical_expression)
各参数说明如下:
NOT FOR REPLICATION
指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。
logical_expression
指定逻辑条件表达式返回值为TRUE 或FALSE。
例7-6: 创建一个订货表其中定货量必须不小于10。
create table orders(
order_id char(8),
p_id char(8),
p_name char(10) ,
quantity smallint,
constraint pk_order_id primary key (order_id),
constraint chk_quantity check (quantity>=10) ,
) on [primary]
注意:对计算列不能作除检查约束外的任何约束。
7.2.5 缺省约束
缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。有关绑定缺省约束的方法请参见“数据完整性”章节。
定义缺省约束的语法如下:
CONSTRAINT constraint_name
DEFAULT constant_expression [FOR column_name]
例7-7:
constraint de_order_quantity default 100 for order_quantity
注意:不能在创建表时定义缺省约束,只能向已经创建好的表中添加缺省约束。
7.2.6 列约束和表约束
对于数据库来说,约束又分为列约束(Column Constraint)和表约束(Table Constraint)。
列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于
多个列。
下面举例说明列约束与表约束的区别。
例7-8:
create table products (
p_id char(8) ,
p_name char(10) ,
price money default 0.01 ,
quantity smallint check (quantity>=10) , /* 列约束 */
constraint pk_p_id primary key (p_id, p_name) /* 表约束 */
发表评论
-
分库,分表,纵表,水平,垂直划分
2013-04-10 16:52 0等待书写内容 -
107条Javascript的常用语句
2012-10-25 21:56 0107条Javascript的常用语句 1. ... -
HttpClient 学习整理
2012-10-12 11:19 1051HttpClient 学习整理 <转自>http ... -
mysql开发中点滴简单但是需要查找的问题
2012-10-10 17:26 01. 怎么样将java中的date类型插入到mysql的dat ... -
CSS工程的开发积累
2012-10-09 14:19 01. 列表项图像 有时候,常规的标志不够与页面的展示, ... -
spring 与 Ibatis的结合开发
2012-10-05 18:10 1139前几天自己利用下班的时间写了一下spring与IBatis的工 ... -
Spring加载resource时classpath*:与classpath:的区别
2012-09-24 19:46 1161Spring加载resource时classpath*:与cl ... -
tomcat集群设置方法
2012-08-27 20:48 708APACHE 2.2.8+TOMCAT6.0.14配置负载均衡 ... -
SQL语句整理【转】
2012-08-09 13:09 864一、基础 1、说明:创建数据库 CREATE DATABASE ... -
ibatis 模糊查询语句总结
2012-07-27 22:10 1056在涉及到ibatis的条件查询的时候,有下面几种查询方式: i ... -
Python 画图学习入门
2012-07-22 15:48 10489Python:使用matplotlib绘制图表 pyth ... -
mysql数据库的导入和导出
2012-07-22 09:14 755MySQL数据库的导入,有两种方法: 1) 先导出数据库SQL ... -
LInux安装 java和tomcat
2012-06-12 16:23 1081这是一个简单的安装步骤,但是之前自己不熟悉linux的系统,所 ... -
网站开发中安全问题初探
2012-03-26 13:07 707一个简单经典的SQL语句注入侵入: 一个网站需要用户输入use ... -
[转] Spring中配置log4j
2012-03-20 07:41 1036转 Spring中配置log4j 首先需要在web.xml进 ... -
spring 注解机制和XML配置机制之间的比较
2012-03-20 07:32 2910spring的annotation注入机制 ...
相关推荐
--发现是启用外键约束时报的错 alter table DM_VOLREV enable constraint VR_VOLID_FK; /*原因分析: 你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入。 ...
用于建立机器人整机动力学方程,包含各关节变量及所受外力
ChatGPT4.0知识问答、DALL-E生成AI图片、Code Copilot辅助编程,打开新世界的大门
基于matlab实现DOA 估计和自适应波束形成.rar
基于C++的线程安全容器。.zip
华为数字化转型实践28个精华问答glkm.pptx
本周-综合案例.zip
基于Swift简单易上手的iOS开发框架.zip
liba52-0-32bit-0.7.5+svn613-1.19.x86_64
本次的设计主要是通过对动漫系统开发的背景、现状进行了分析,总结出了本次动漫之家系统开发的意义。根据此次开发的目的和意义,本次的系统开发选择了SSM框架、HTML5以及idea平台来进行动漫之家系统的开发,通过MySQL来进行数据库的开发。通过对整个动漫之家系统进行功能需求的调查研究,通过对此次的系统开发进行可行性的分析。通过实体图模型以及功能结构模型来对本次的系统开发进行了整体的开发。在整个系统开发完毕之后,通过截图说明的方式来进行系统功能的介绍,最后通过系统测试来对本次系统的完整性进行测试,最终通过本次的开发,整个动漫之家系统可以实现很好的运行,起到了为动漫爱好者提供动漫资讯的功能运行。 在前端的系统开发上,主要是为了给动漫爱好者们提供一个在线交流、在线观看动漫、在线购买动漫周边的综合性服务平台。通过这个平台,可以通过注册成为会员后,在动漫内容下进行留言互动来实现更好的动漫交流与观后感的分享,可以提高站内用户对于该网站的使用兴趣。而后台则主要为该动漫之家系统的管理员提供管理服务,后台的管理中,管理员能 关键词:动漫之家;论坛网站;SSM框架;MySQL数据库
基于matlab数字图像处理的黄豆数量识别(GUI界面),基于matlab数字图像处理的黄豆数量识别(GUI界面),基于matlab数字图像处理的黄豆数量识别(GUI界面)
数字化转型数据架构设计方法论及案例qy.pptx
在 Apple Silicon Mac 上入门汇编语言.zip
2024年中国微光夜视相机行业研究报告
liba2ps1-4.14-bp154.2.102.s390x
1222222222222
一个基于C++的IM实现.zip
显示温度和电压测量值在一个LCD屏幕上
ASP娱乐KTV夜场人才招聘信息资源网站源码 PC+WAP.rarASP娱乐KTV夜场人才招聘信息资源网站源码 PC+WAP.rar
基于嵌入式