Oracle--数据库中的五种约束

数据库中的五种约束

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

五大约束

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

时间: 2024-11-10 01:06:45

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

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

数据库中的五种约束及其添加方法五大约束1.—-主键约束(Primay Key Coustraint) 唯一性,非空性 2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个 3.—-检查约束 (Check Counstraint) 对该列数据的范围.格式的限制(如:年龄.性别等) 4.—-默认约束 (Default Counstraint) 该数据的默认值 5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列五大

excel中十万级数据导入oracle数据库中的几种方法

1.plsql中的ODBC Imported和text imported,可以直接选择文件导入.具体导入操作细节不赘述.大数据量的导入效率不行: 2.sql develop中,选择目标表,右键菜单选择“导入数据”,将excel文件存为cvs格式,浏览选中,根据向导操作.效率比较高! 38万条数据大约14分钟完成导入.

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

约束作用:用来保持数据的完整性,防止无效数据进入到数据库中.oracle数据库中提供的5种约束,都是限定某个列或者列的组合的.1.主键约束(PRIMARY KEY):在一个表中能唯一的标识一行.主键可以限定在多个列上.2.唯一键约束(UNIQUE key):在一个表中能唯一的标识一行,唯一键也可以限定在多个列上.主键和唯一键的区别:a.一个表中最多只能有一个主键.可以多个唯一键.b.主键所限定的列不能为null,唯一键所限定的列可以为null.3.外键约束(FOREIGN key):   引用表

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

转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去. 1. 简单导出数据(Export)和导入数据(Import) Oracle支持三种方式类型的

如何处理Oracle数据库中的坏块问题

本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率会越来越大,因此,做为一个DBA,怎么去解决数据库出现的坏块问题就成了一个重要的议题了. 一:什么是数据库的坏块   首先我们来大概看一下数据库块的格式和结构 数据库的数据块有固定的格式和结构,分三层:cache layer,transaction layer,data layer.在我们对数据块进

详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop import命令将RDBMS中的数据导入到HDFS/Hive/HBase中,也可以通过sqoop export命令将HDFS/Hive/HBase中的

给Oracle数据库中CLOB字段插入空值

遇到往ORACLE数据库中插入数据时总是报ORA-01084 invalid argument in OCI call错误,经分析是因为表中的一个字段类型为CLOB,并且可为空,当在给该字段插入空值时引发的该错误.后来判断是否为空值,如果为空值使用DBNull.Value,以此解决了该问题. Null 指的是无效的对象引用:而 DBNull 是一个类, DBNull.Value 是它唯一的实例 .DBNull 的实例 DBNull.Value是数据库表中的空数据在 .Net 代码中的表现形式.我

Oracle数据库中的blob类型解析

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作

Oracle数据库中序列(SEQUENCE)的用法详解

在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了序列的用法,希望能够对您有所帮助. AD: 在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其实是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值. 创建序列需要CREATE SEQUENCE系统权限