您的位置:首页 > 数据库

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

2017-03-11 22:39 197 查看
约束是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: