跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

SQL中的几种约束的创建与删除

约束是SQL Server提供的自动保持数据库完整性的一种方法, 它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。

约束可分为以下几种:

1、PRIMARY KEY 主键约束 2、FOREIGN KEY 外键约束 3、UNIQUE 约束 唯一约束 4、CHECK 约束 检查约束 5、DEFUALT 定义 默认约束

一、主键约束

如果对多列定义了 PRIMARY KEY 约束,则一列中的值可能会重复,但来自 PRIMARY KEY 约束定义中所有列的任何值组合必须唯一。

如图:

主键约束的定义:

1. 列中不允许有空值 2. 列中不允许有重复的值,即主键列中每个值都是唯一的。

3. 如果另一个表中的 FOREIGN KEY 约束引用了 PRIMARY KEY 约束,则必须先删除 FOREIGN KEY 约束。

4. 表包含应用于自身的 PRIMARY XML 索引

主键的创建:

1、 在创建表时创建 PRIMARY KEY 约束

以下是AdventureWorks2008R2 示例数据库中 Employee 表(允许系统提供约束名)的 BusinessEntityID 列具有聚集索引的 PRIMARY KEY 约束的列定义

BusinessEntityID int

PRIMARY KEY CLUSTERED

2、为现有表创建或删除 PRIMARY KEY 约束 USE AdventureWorks2008R2;

GO ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID) WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON); GO

3、删除主键约束

使用表设计器,在表网格中右键单击包含主键的行,再选择“移除主键”以将该设置从启用切换到禁用。

或者新建查询文件,键入 USE AdventureWorks2008R2; GO --修改表Production ALTER TABLE Production.TransactionHistoryArchive DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID GO

“` 二、FOREIGN KEY 外键约束

外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。

例如,因为销售订单和销售人员之间存在一种逻辑关系,所以 AdventureWorks2008R2 数据库中的 Sales.SalesOrderHeader 表含有一个指向 Sales.SalesPerson 表的链接。

SalesOrderHeader 表中的 SalesPersonID 列与 SalesPerson 表中的主键列相对应。

SalesOrderHeader 表中的 SalesPersonID 列是指向 SalesPerson 表的外键。

外键约束要遵循引用完整性原则

建立外键约束的基本格式为: FOREIGN KEY(列名) REFERENCES 被参照表名(列名) 例: 1、创建表时添加外键约束 SalesPersonID int NULL REFERENCES SalesPerson(BusinessEntityID)

2、修添改表时加约束,显示指定外键约束两个表中列名不必相同 FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(BusinessEntityID)

3、删除外键 ALTER TABLE Person.ContactBackup DROP CONSTRAINT FK_ContactBacup_Contact

三、UNIQUE 约束 唯一约束

唯一约束可确保在非主键列中不输入重复的值,可以对一个表定义多个唯一约束

1、在建表时创建唯一约束:

Name nvarchar(100) NOT NULL UNIQUE NONCLUSTERED

2、在现有表中创建 UNIQUE 约束

新建查询,键入 USE DATABASE1 --使用DATABASE1数据库 ALTER TABLE T1 --修改表T1 CONSTRAINT UQ_ID UNIQUE(ID) --为名为ID列的唯一约束

3、删除唯一约束 ``` CREATE TABLE dbo.doc_exc ( column_a INT CONSTRAINT my_constraint UNIQUE) ; --指定表和唯一约束的列 GO ALTER TABLE dbo.doc_exc DROP CONSTRAINT my_constraint ; GO ```

4、CHECK 约束 检查约束

检查约束常用来检查某列的元素值是否在合理的范围之内,CHECK 约束可以强制域的完整性.

1、在创建表时创建检查约束

CreditRating int NOT NULL CHECK (CreditRating >= 1 and CreditRating <= 5), --将CreditRating 的值约束在1到5之间

2、在修改表时创建约束 CREATE TABLE dbo.doc_exd --将使用 WITH NOCHECK 以避免根据现有行验证该约束 ALTER TABLE dbo.doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (CreditRating >= 1 and CreditRating <= 5),

注:不能在 text、ntext 或 image 列上定义 CHECK 约束

3、删除CHECK约束

ALTER TABLE doc_exd.CreditRating DROP CONSTRAINT CK_CreditRating ;

5、DEFUALT 定义 默认约束

默认约束强制数据完整性,记录中的每列均必须有值,即使该值是 NULL。

使用默认约束可在表中的列元素缺省的情况下(未填入)为列中的每个元素设置默认值。

DEFAULT 定义和列的为空性所定义的列中的值可归纳如下表中所示:

1、在建表时添加默认约束

Position nvarchar(20) NULL --为职位赋一个默认的字符串 DEFAULT 'New Position - title not formalized yet',

2、在现有表中添加默认约束 ALTER TABLE dbo.T1 ADD CONSTRAINT Position DEFAULT 'New Position - title not formalized yet' FOR Position ;

3、删除默认值

语法DROP DEFAULT { [ schema_name . ] default_name } [ ,...n ] [ ; ]

USE AdventureWorks2008R2; GO IF EXISTS (SELECT name FROM sys.objects WHERE name = 'datedflt' AND type = 'D') DROP DEFAULT datedflt GO

相关文章