创建和使用约束
约束(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) /* 表约束 */
分享到:
相关推荐
MySQL 约束的使用 MySQL 约束是指在创建表时对表中的数据进行限制和约束,以确保数据的完整性和一致性。约束类型总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束。 1. 唯一性和主键...
MySQL约束是数据库设计中的关键元素,它们用于定义和维护数据的完整性。在Java编程中,尤其是在开发基于数据库的应用程序时,理解MySQL约束至关重要。本文将深入探讨MySQL的各类约束及其在Java应用程序中的应用。 ...
MySQL 约束条件 MySQL 约束条件是指在创建表格时对字段的限制条件,以控制用户在插入数据时的行为。这些约束条件可以使数据库更加健壮、安全和可靠。 NULL 约束 NULL 约束是指是否允许字段为空值。如果 NULL 的值...
### MySQL约束(三) #### 内容概要 本篇文档深入探讨了MySQL数据库中的多种约束类型及其实际应用场景,作为约束系列教程的第三部分,它不仅涵盖了基础概念,还涉及了高级用法。 #### 主要内容概述 1. **PRIMARY ...
### MySQL约束课堂笔记知识点 #### DQL:查询语句 **1. 排序查询** - **语法**:`ORDER BY`子句用于对结果集按照一个或多个列的值进行排序。 - 示例语法:`ORDER BY column1 ASC|DESC, column2 ASC|DESC` - `...
MySQL约束是用来限制数据库表中数据的规则。它们强制执行特定的数据格式和业务逻辑,以防止无效或不一致的数据输入。主要有以下几种类型的约束: 1. **非空约束 (NOT NULL)**:不允许字段值为空。这是确保字段必须...
在"day03_MySQL约束2"的学习中,我们将探讨几种主要的约束类型,并结合DQL操作,如排序、聚合和分组查询,来深入理解如何在实际应用中使用这些约束。 1. **非空约束(NOT NULL)**:这种约束强制列中的值不能为空,...
MySQL约束课堂笔记.html
mysql约束与索引(任务)
MySQL约束是数据库设计中的关键元素,用于确保数据的完整性和一致性。它们定义了表中数据必须遵循的规则,防止不合法或错误的数据被插入或更新。以下是对MySQL约束的详细阐述: 1. **非空约束 (NOT NULL)**:此约束...
MySQL约束111111
### 搞定难点:MySQL神秘的约束机制 #### 一、引言 数据库的约束机制是维护数据完整性和正确性的关键。本文将详细介绍MySQL中的几种常见约束,并通过实例进行说明,帮助读者更好地理解如何利用这些约束来保障数据...
1:主键约束 2:自增长约束 3:非空约束 4:唯一约束 5:默认约束 6:零填充约束
在本教程中,我们将探讨几个关键的MySQL知识点,包括DQL操作、约束、多表关系以及数据库管理。 1. **DQL操作**: 数据库查询语言(DQL)是SQL的一个子集,主要用于检索数据。在本课程中,你将学习如何进行排序查询...
约束类型包括:NOT NULL (非空约束),PRIMARY KEY(主键约束),UNIQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN(外键约束) 1.主键约束 PRIMARY KEY 每张数据表只能存在一个主键 主键保证记录的唯一...
在学习MySQL的过程中,了解约束与设计是非常重要的,因为它们确保了数据的准确性和一致性。本教程主要关注MySQL中的表约束和数据库设计基础,适合初学者自学。 1. **数据库管理**: - **DDL(Data Definition ...
这是JavaWeb入门基础,数据库MySql基础的相关知识总结。之前自己学的和用的是SQL Server2008,对MySql掌握不够熟练,不过SQL语句都是差不多,所以上手比较容易。写博客就是为了方便自己复习查看,同时也将自己的学习...
MySQL约束和多表查询 MySQL约束是为了保证数据的完整性和正确性,而多表查询则是为了处理多个表之间的关系。以下是 MySQL约束和多表查询的相关知识点: 实体完整性 实体完整性是指保证每一行数据的唯一性,不允许...