数据库中的五种约束

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

五大约束

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. 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)

    题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...

  2. LoadRunner常用函数列表

    LoadRunner常用函数列表 Web相关函数 函 数 功  能  描  述 web_custom_request 用户可以通过该函数自行创建一个HTTP请求的函数 web_image 模拟用户单击 ...

  3. 实现Web验证码图片-原理

    实现验证码的基础 GDI+ graphics device interface plus的缩写,即图形设备接口.GDI+为开发者提供了一组实现与各种设备(具有图形化能力但不涉及图形细节的设备)进行交互 ...

  4. DSP using Matlab 书内练习Example 2.1

    先上代码,后出结果图. a. n = [-5:5]; x=2*impseq(-2,-5,5) - impseq(4,-5,5); set(gcf,'Color',[1,1,1]) % 改变坐标外围背景 ...

  5. iOS10 UI教程视图和子视图的可见性

    iOS10 UI教程视图和子视图的可见性 iOS10 UI教程视图和子视图的可见性,一个父视图可以通过clipsToBounds属性,定义子视图在边界(边界就是父视图的框架也就是父视图可以显示的范围) ...

  6. iOS开发实用干货——强化你的Xcode控制台

    f(x) 郑秀晶程序员不要整天看代码,偶尔也要看看风景?? www.90168.org先上一张我的Xcode控制台的图片让你们感受一下 酷炫控制台 是不是觉得很酷?不过仅仅是酷还是远远不够的,当你点击 ...

  7. Python基础1-Python环境搭建

    Python环境搭建首先通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本: 若未安装则需要下载安装,下面为linux和windo ...

  8. oracle 授权

    1.授权oss01用户,此用户可以执行sys.utl_i18n存储过程. grant execute on sys.utl_i18n to oss01;grant execute on sys.dbm ...

  9. -bash: /bin/rm: Argument list too long的解决办法

    当目录下文件太多时,用rm删除文件会报错: -bash: /bin/rm: Argument list too long 提示文件数目太多. 解决的办法是使用如下命令: rm -fr ls 输出所有的 ...

  10. 使用 google gson 转换Timestamp或Date类型为JSON字符串.

    http://blog.csdn.net/z69183787/article/details/13016289 创建类型适配类: import java.lang.reflect.Type; impo ...