`

数据库中的五种约束

阅读更多

数据库中的五种约束及其添加方法
五大约束
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数据库的完整性约束规则详解

    本文将深入探讨Oracle数据库中的五种主要完整性约束规则:Check、NOT NULL、Unique、Primary Key和Foreign Key。 #### 二、Check约束 Check约束用于验证数据列的值是否满足特定的条件,如数值范围、字符集等。这种...

    数据库完整性约束条件

    数据库完整性约束条件是确保数据库中数据准确无误和一致性的重要机制。这些约束条件分为静态和动态两类,分别针对数据在不同状态和变化过程中的规则。完整性检查主要关注三个方面:关系、元组和列。 首先,静态列级...

    SQL数据库为表格建立约束

    在关系数据库管理系统中,约束是对表格中数据的一种限制,以确保数据的准确性、完整性和一致性。SQL 数据库为表格建立约束的方法有多种,本文将详细介绍这些方法。 1. 主键约束(Primary Key) 主键约束是指对表格...

    基于MySQL数据库实施完整性约束的研究.pdf

    本文主要研究 MySQL 数据库中实施完整性约束的方法,介绍了 MySQL 中五种常用的约束:主键约束、外键约束、唯一键约束、非空约束和默认值约束。通过对这些约束的详细介绍,文章旨在帮助开发者更好地理解和应用 MySQL...

    达梦数据库禁用约束.sql

    达梦数据库

    数据库五大约束使用方法

    下面将详细解释这五种约束及其在实际应用中的使用方法。 1. 主键约束 (Primary Key Constraint) 主键约束是用于唯一标识表中每一行的字段,它确保了每个值的唯一性和非空性。一个表只能有一个主键,且主键的值不能...

    达梦数据库查询约束索引.sql

    达梦数据库

    数据库 约束的介绍分析

    总的来说,数据库约束是保证数据完整性的基石,而视图则是数据库中灵活的数据呈现和管理工具,两者结合使用能够提升数据库系统的实用性和安全性。理解并熟练掌握这两者对于数据库设计和管理至关重要。

    数据库外键约束方式

    外键约束是数据库中实现参照完整性的重要手段,它能够确保数据的一致性和正确性。外键约束方式有多种,包括级联、置空和禁止三种方式。 级联(Cascade)方式是指当主表中的记录被删除或更新时,从表中的相关记录也...

    Oracle数据库的完整性约束和序列规则详解

    完整性约束主要有五种类型:Check约束、NOT NULL约束、Unique约束、Primary键约束和Foreign key约束。 Check约束允许用户定义特定的业务规则,以确保表中的数据满足这些规则。例如,一个Check约束可以确保"性别"列...

    数据库建表-建约束-建外键.doc

    约束是数据库中的一种规则,它用于限制数据的输入和存储。常见的约束有PRIMARY KEY、UNIQUE、CHECK、DEFAULT等。 在本文中,我们使用了多种约束,例如: * PRIMARY KEY约束:Course表的CID列为主键,Stu表的SID...

    数据库设计三大范式五大约束.docx

    也就是说,在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。例如,在一个订单信息表中,每个订单都有一个唯一的订单号作为主键,那么其他字段如订单日期、客户名称等都应该和...

    Oracle公司内部数据库培训资料10约束.pptx

    在Oracle中,主要有五种类型的约束: 1. **NOT NULL**约束:此约束强制列中的值不能为空。它确保每一行在该列都有一个值,不允许NULL。例如,在`employees`表的`last_name`列中应用`NOT NULL`约束,确保每个员工都...

    达梦数据库禁用约束索引.sql

    达梦数据库

    基于Oracle数据库的完整性约束应用研究.pdf

    Oracle数据库是一种广泛应用于企业级应用的关系型数据库管理系统,其核心特性之一是强大的数据完整性约束机制。数据完整性是指数据库中数据的正确性和一致性,是保证数据库可靠性的基础。本篇文章主要探讨了如何在...

    湖南大学数据库实验四性约束、视图、存储过程和数据安全.doc

    实体完整性约束是指对数据库中的数据实体进行约束,以确保数据的正确性和一致性。包括primary key、foreign key、check、default等约束类型。本实验中,我们学习了创立四类完整性约束的方法: 1. PRIMARY KEY 约束...

    oracle 数据库约束笔记

    Oracle 数据库约束是一种机制,用于确保数据库数据的完整性和一致性。约束是指在数据库中强制执行某些规则,以确保数据的正确性和一致性。Oracle 数据库提供了多种类型的约束,包括 NOT NULL、UNIQUE、PRIMARY KEY、...

Global site tag (gtag.js) - Google Analytics