数据库中的五种约束

数据库中的五种约束及其添加方法

五大约束

1.—-主键约束(Primay Key Coustraint) 唯一性,非空性

 2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个

 3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)

 4.—-默认约束 (Default Counstraint) 该数据的默认值

 5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列

五大约束的语法示例

 1.—-添加主键约束(将stuNo作为主键)

 alter table stuInfo

 add constraint PK_stuNo primary key (stuNo)

 2.—-添加唯一约束(身份证号唯一,因为每个人的都不一样)

 alter table stuInfo

 add constraint UQ_stuID unique(stuID)

 3.—-添加默认约束(如果地址不填 默认为“地址不详”)

 alter table stuInfo

 add constraint DF_stuAddress default (‘地址不详’) for stuAddress

 4.—-添加检查约束 (对年龄加以限定 15-40岁之间)

 alter table stuInfo

 add constraint CK_stuAge check (stuAge between 15 and 40)

alter table stuInfo

 add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)

5.—-添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)

alter table stuInfo

 add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)

 约束(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) /* 表约束 */

Oracle--数据库中的五种约束的更多相关文章

  1. 【SQL】数据库中的五种约束

    #五大约束 1.主键约束(Primay Key Coustraint) 唯一性,非空性 2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个 3.检查约束 (Check ...

  2. oracle数据库中的四种循环

    [sql]  DECLARE  x number;  BEGIN  x:=9;  <<repeat_loop>>  --循环点  x:=x-1;  DBMS_OUTPUT.PU ...

  3. oracle数据库中提供的5种约束

    约束作用:用来保持数据的完整性,防止无效数据进入到数据库中.oracle数据库中提供的5种约束,都是限定某个列或者列的组合的.1.主键约束(PRIMARY KEY):在一个表中能唯一的标识一行.主键可 ...

  4. Oracle 数据库中查看表空间的2种方法

    在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...

  5. 查找Oracle数据库中的重复记录

    本文介绍了几种快速查找ORACLE数据库中的重复记录的方法. 下面以表table_name为例,介绍三种不同的方法来确定库表中重复的记录 方法1:利用分组函数查找表中的重复行:按照某个字段分组,找出行 ...

  6. SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束

    一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...

  7. (面试题)如何查找Oracle数据库中的重复记录

    今天做了个面试题:查找Oracle数据库中的重复记录,下面详细介绍其他方法(参考其他资料) 本文介绍了几种快速查找ORACLE数据库中的重复记录的方法. 下面以表table_name为例,介绍三种不同 ...

  8. Oracle数据库备份与恢复的三种方法

    转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...

  9. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

随机推荐

  1. java-xml格式化

    参考:http://www.oschina.net/code/snippet_17793_4733 package com.ddatsh;   import java.io.IOException; ...

  2. 64位ubuntu下重新编译hadoop2.2流水账

    hadoop官方网站中只提供了32位的hadoop-2.2.0.tar.gz,如果要在64位ubuntu下部署hadoop-2.2.0,就需要重新编译源码包,生成64位的部署包.建议以下操作使用roo ...

  3. hdu 3001(状压dp, 3进制)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 由于本题中一个点最多能够访问2次,由此可以联想到3进制; visited[i][j]表示在状态i ...

  4. RDS MySQL 全文检索相关问题的处理

    RDS MySQL 全文检索相关问题 1. RDS MySQL 对全文检索的支持 2. RDS MySQL 全文检索相关参数 3. RDS MySQL 全文检索中文支持 3.1 MyISAM 引擎表 ...

  5. Linux学习笔记(23) Linux备份

    1. 备份概述 Linux系统需要备份的数据有/root,/home,/var/spool/mail,/etc及日志等其他目录. 安装服务的数据需要备份,如apache需要备份的数据有配置文件.网页主 ...

  6. java 请求 google translate

    // */ // ]]> java 请求 google translate Table of Contents 1. 使用Java获取Google Translate结果 1.1. 开发环境设置 ...

  7. java net编程

    转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...

  8. 常用eclipse 快捷键

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...

  9. 20145223《Java程序设计》第5周学习总结

    20145223 <Java程序设计>第5周学习总结 教材学习内容总结 ·由于在编程的时候会遇到因各种原因而导致的错误,于是我们可以使用"try"."catc ...

  10. json解析不推荐使用eval

    推荐使用JSON.parse() 低版本浏览器(IE6/7)不支持此方法,可以通过网上下载json2.js,引入到文件中,此文件通过判断浏览器是否支持JSON.parse()方法,如果不支持,文件中编 ...