约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。

7.2.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]

7.2.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]
注意:临时表不能指定外关键字约束。
7.2.3 惟一性约束
惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有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) /* 表约束 */

文章引用自:

创建和使用约束Constraint相关推荐

  1. oracle创建外键约束的两种方式

    1.创建表时直接创建外键约束 create table books(bookid number(10) not null primary key,bookName varchar2(20) not n ...

  2. 使用sql语句创建和删除约束示例代码

    使用sql语句创建和删除约束  约束类型 主键约束(Primary Key constraint) --:要求主键列数据唯一,并且不允许为空.  唯一约束(Unique constraint) --: ...

  3. SQL基础--gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  4. 数据库 约束(Constraint)、多表关系和范式

    文章目录 约束 Constraint 分类 多表关系 范式 第一范式1NF. 第二范式2NF 第三范式3NF BCNF 约束 Constraint 概念: 对表中数据进行限制,保证数据正确性.有效性. ...

  5. mysql 创建外键约束以及注意事项

    mysql 创建外键约束以及注意事项: 创建外键: 首先创建一张区域表 CREATE TABLE `area` (`id` int(11) NOT NULL DEFAULT '0' COMMENT ' ...

  6. Oracle创建外键约束

    1. 创建表时创建外键 CREATE TABLE T1(employee_id NUMBER(4), last_name VARCHAR2(10), job_id VARCHAR2(9), salar ...

  7. mysql 创建外键约束

    前言 如果一张表中有一个非主键的字段指向了另一张表中的主键,就将该字段叫做 外键. 一张表中外键可以有多个,也就是不同字段指向了不同表中的主键. 方式1-在创建表时设置外键约束 [constraint ...

  8. 使用mysql创建外键约束_Mysql创建外键约束的两种方式

    通过给mysql的表字段添加外键约束,可以有效的保持数据的一致性和完整性,数据就不会很容易出问题. 1.创建表时直接创建外键约束create table books( bookid number(10 ...

  9. [MySQL]约束(constraint)

    文章目录 1. 约束 1.1 数据的完整性 1.2 约束 1.3 约束的分类 2. 查看表中的约束 3. 非空约束(NOT NULL) 3.1 作用 3.2 特点 3.3 添加非空约束 3.3.1 建 ...

最新文章

  1. centos上用yum安装rar/unrar
  2. html轮播文字上下轮播,js、jQuery实现文字上下无缝轮播、滚动效果
  3. 为系统扩展而采取的一些措施——缓存
  4. Win 10 更新,Linux 内核的 WSL 2 开始上线
  5. 浅谈大数据思维——一名管科类学生基于《大数据时代》的思考
  6. 数字电路-逻辑函数化简
  7. ES数据的操作(二)
  8. 前端批量打包下载图片_个人总结 _@jie
  9. 2022年软件测试——精选金融银行面试真题
  10. microsoft edge 浏览器添加兼容网址
  11. SQL优化建议(不定时更新添加)
  12. 以数赋能,中国系统让数据治理脱虚入实
  13. 卷积和反卷积(deconv)
  14. [JMX一步步来] 2、JMX简介
  15. 材料学专业跨考计算机,2019年985材料跨考同济大学计算机上岸考研初复试经验分享!...
  16. Hadoop 运行wordcount任务卡在job running的一种解决办法
  17. 手机模拟器之争:Genimotion在左,海马玩在右
  18. 使用html5的游戏,使用HTML5制作游戏
  19. 16进制转double dotnet_IEEE 16进制字符串转化为double类型
  20. Jason高度计-波形重跟踪tips

热门文章

  1. 深入理解JavaScript定时器
  2. PHP 中Cookie和Session的使用
  3. 2017linux版本号,Linux基本命令 2017-11-27
  4. 初始化git仓库,并push到远端
  5. 解决在Windows 2003的 IIS 6.0 中无法上传超过200K的附件以及无法下载超过4M的附件问题...
  6. html----学习笔记
  7. [转]Newtonsoft.Json高级用法
  8. 又拍云沈志华:如何打造一款安全的App
  9. 图像处理之形态学梯度计算
  10. 【BZOJ 2301】[HAOI2011]Problem b