SQL Server 表的管理之_关于完整性约束的详解

一、概述:

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

  ●SQL约束用于指定表中数据的规则。

  ●约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

1.1SQL创建约束

当使用CREATE TABLE语句创建表时,或者在使用ALTER TABLE语句创建表之后,可以指定约束。

语法

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);
SQL CREATE TABLE + CONSTRAINT 语法

CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);

1.2删除约束

任何现有约束都可以通过在 ALTER TABLE 命令中指定 DROP CONSTRAINT 选项的方法删除掉。

例如,要去除 EMPLOYEES 表中的主键约束,可以使用下述命令:

 ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

一些数据库实现可能提供了删除特定约束的快捷方法。例如,要在 Oracle 中删除一张表的主键约束,可以使用如下命令:

 ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

某些数据库实现允许禁用约束。这样与其从数据库中永久删除约束,你可以只是临时禁用掉它,过一段时间后再重新启用。

1.3完整性约束

完整性约束用于保证关系型数据库中数据的精确性和一致性。对于关系型数据库来说,数据完整性由参照完整性(referential integrity,RI)来保证。

有很多种约束可以起到参照完整性的作用,这些约束包括主键约束(Primary Key)、外键约束(Foreign Key)、唯一性约束(Unique Constraint)以及上面提到的其他约束。

约束可分为以下几种:

1、PRIMARY KEY 主键约束

2、FOREIGN KEY 外键约束

3、UNIQUE 约束 唯一约束

4、CHECK 约束 检查约束

5、DEFUALT 定义 默认约束

下面分别详解:

二、SQL PRIMARY KEY约束


2.1SQL PRIMARY KEY约束

●PRIMARY KEY约束唯一标识数据库表中的每条记录。

●主键必须包含唯一的值。

●主键列不能包含NULL值。

●每个表都应该有一个主键,并且每个表只能有一个主键。


2.2CREATE TABLE时的SQL PRIMARY KEY约束

CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName ) NOT NULL,
FirstName ),
Address ),
City )
)

2.3ALTER TABLE时的SQL PRIMARY KEY约束

当表已被创建时,如需在“P_Id”列创建PRIMARY KEY约束,请使用下面的SQL:

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)

2.4撤销PRIMARY KEY约束

如需撤销PRIMARY KEY约束,请使用下面的SQL:

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID

三、SQL FOREIGN KEY约束

3.1SQL FOREIGN KEY约束

一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY。

。让我们通过一个实例来解释外键请看下面两个表:

“人员”表:

P_Id是PRIMARY KEY

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

“订单”表:P_Id是FOREIGN KEY

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

请注意,“Orders”表中的“P_Id”列指向“Persons”表中的“P_Id”列。

“Persons”表中的“P_Id”列是“Persons”表中的PRIMARY KEY。

“Orders”表中的“P_Id”列是“Orders”表中的FOREIGN KEY。

FOREIGN KEY约束用于预防破坏表之间连接的行为。

FOREIGN KEY约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。


3.2CREATE TABLE时的SQL FOREIGN KEY约束

下面的SQL在“订单”表创建时在“P_Id”列上创建FOREIGN KEY约束:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

如需命名FOREIGN KEY约束,并定义多个列的FOREIGN KEY约束,请使用下面的SQL语法:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

3.3ALTER TABLE时的SQL FOREIGN KEY约束

当“Orders”表已被创建时,如需在“P_Id”列创建FOREIGN KEY约束,请使用下面的SQL:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

如需命名FOREIGN KEY约束,并定义多个列的FOREIGN KEY约束,请使用下面的SQL语法:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

3.4撤销FOREIGN KEY约束

如需撤销FOREIGN KEY约束,请使用下面的SQL:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

四、SQL UNIQUE 约束

4.1UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。


4.2CREATE TABLE 时的 SQL UNIQUE 约束

下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 UNIQUE 约束:

CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName ) NOT NULL,
FirstName ),
Address ),
City )
)

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName ) NOT NULL,
FirstName ),
Address ),
City ),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)

4.3ALTER TABLE 时的 SQL UNIQUE 约束

当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束,请使用下面的 SQL:

ALTER TABLE Persons
ADD UNIQUE (P_Id)

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

4.4撤销 UNIQUE 约束

如需撤销 UNIQUE 约束,请使用下面的 SQL:

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

五、SQL CHECK约束

5.1SQL CHECK约束

CHECK约束用于限制列中的值的范围。

如果对单个列定义CHECK约束,那么该列只允许特定的值。

如果对一个表定义CHECK约束,那么这个约束将基于行中其他列的值在特定的列中对值进行限制。

5.2CREATE TABLE时的SQL CHECK约束

下面的SQL在“Persons”表创建时在“P_Id”列上创建CHECK约束.CHECK约束规定“P_Id”列必须包含大于0的整数。

CREATE TABLE Persons
(
P_Id ),
LastName ) NOT NULL,
FirstName ),
Address ),
City )
)

如需命名CHECK约束,并定义多个列的CHECK约束,请使用下面的SQL语法:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName ) NOT NULL,
FirstName ),
Address ),
City ),
 AND City='Sandnes')
)

5.3ALTER TABLE时的SQL CHECK约束

当表已被创建时,如需在“P_Id”列创建CHECK约束,请使用下面的SQL:

ALTER TABLE Persons
)

如需命名CHECK约束,并定义多个列的CHECK约束,请使用下面的SQL语法:

ALTER TABLE Persons
 AND City='Sandnes')

5.4撤销CHECK约束

如需撤销CHECK约束,请使用下面的SQL:

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

六、SQL NOT NULL 约束

在默认的情况下,表的列接受 NULL 值。


6.1SQL NOT NULL 约束

NOT NULL 约束强制列不接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

下面的 SQL 强制 "P_Id" 列和 "LastName" 列不接受 NULL 值:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName ) NOT NULL,
FirstName ),
Address ),
City )
)

今天刚学到的。。。

SQL Server 表的管理_关于完整性约束的详解(案例代码)的更多相关文章

  1. SQL Server 表的管理_关于事务的处理的详解(案例代码)

    SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...

  2. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  3. SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...

  4. SQL Server 表的管理_关于事务操作的详解(案例代码)

    SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...

  5. SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...

  6. SQL Server中排名函数row_number,rank,dense_rank,ntile详解

    SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...

  7. 转:SQL Server中服务器角色和数据库角色权限详解

    当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角 ...

  8. SQL Server:排名函数row_number,rank,dense_rank,ntile详解

    1.Row_Number函数 row_number函数大家比较熟悉一些,因为它的用途非常的广泛,我们经常在分页与排序中用到它,它的功能就是在每一行中生成一个连续的不重复的序号 例如: select S ...

  9. SQL Server 2008 R2:error 26 开启远程连接详解

    远程连接sql server 2008 数据库,出现下面的错误: <--在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.    未找到或无法访问服务器.请验证实例名称是 ...

随机推荐

  1. Inventory Transactions Manager

    Overview Inventory Transaction Manager用于处理库存接口表(MTL_TRANSACTION_INTERFACE或者MTL_MATERIAL_TRANSACTIONS ...

  2. 为什么不要重载 && 和 || 操作符!!!

    理论知识: 1)&&和 || 是C++中非常特殊的操作符 2)&&和 || 内置实现了短路规则 简单说明一下短路规则. demo1 #include <iostr ...

  3. OJ题:将一个数倒置输出

    题目描述: 输入一个数,假如num = 12345 , 输出 54321,以此类推. 代码实现: ) ; }

  4. 网站开发进阶(三十七)JSP页面跳转问题解决

    JSP页面跳转问题解决 PS:本篇博文质量欠佳,仅供个人学习之用. 前言 在做Web开发时,对别人的应用(jsp+servlet)进行服务器部署时出现了页面跳转无效的情况.但是项目在本地未出现此状况. ...

  5. PHP解决中文乱码问题

    初学PHP,在汉字页面间传输和转换的时候,遇到了中文乱码问题. 究其原因乱码无外乎以下几种情况: 1.html页本身的乱码问题, 解决方法:纯html页使用<meta http-equiv=&q ...

  6. cocos2d-x初探

    今天把cocos2d-x下载下来装了准备试试. 就不用windows本了,主要想做iOS游戏,所以这里用mac. 先在http://cocos2d-x.org/download下载右边的cocos,然 ...

  7. 多线程爬虫Miner

    多线程爬虫Miner 需要配置项:1.URL包含关键字.2.存储方式:DB-数据库存储;FILE-文件存储.3.爬取页面最大深度.4.下载页面线程数.5.分析页面线程数.6.存储线程数. ------ ...

  8. 谈谈Ext JS的组件——布局的使用方法

    概述 在Ext JS中,包含两类布局:组件类布局和容器类布局.由于有些组件是有不同的组件组合而成的,如字段就由标题和输入框构成,他们之间也是存在布局关系的,而这就需要组件类布局来处理组件内自己特有的布 ...

  9. 使用CocoaPods创建Pod

    本来想给App评分,好的开源组件没有Swift版,如是自己写了个简易的.想着既然写了,就写完善点,提供给需要的人使用.这样SwiftyiRate诞生了. 下面主要说下创建pod的步骤: 一.创建git ...

  10. StoreType.java 存储方式

    StoreType.java 存储方式 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner; /** * 存储方式 ...