SQL Server 表的管理_关于完整性约束的详解(案例代码)
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 表的管理_关于完整性约束的详解(案例代码)的更多相关文章
- SQL Server 表的管理_关于事务的处理的详解(案例代码)
SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...
- SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...
- SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...
- SQL Server 表的管理_关于事务操作的详解(案例代码)
SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...
- SQL Server中通用数据库角色权限的处理详解
SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
- SQL Server中排名函数row_number,rank,dense_rank,ntile详解
SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...
- 转:SQL Server中服务器角色和数据库角色权限详解
当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角 ...
- SQL Server:排名函数row_number,rank,dense_rank,ntile详解
1.Row_Number函数 row_number函数大家比较熟悉一些,因为它的用途非常的广泛,我们经常在分页与排序中用到它,它的功能就是在每一行中生成一个连续的不重复的序号 例如: select S ...
- SQL Server 2008 R2:error 26 开启远程连接详解
远程连接sql server 2008 数据库,出现下面的错误: <--在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误. 未找到或无法访问服务器.请验证实例名称是 ...
随机推荐
- Unity UGUI基础之Text
Text作为UGUI最基础的控件以及最常用的控件,它在项目中的应用绝对可以算是最多的,任何一个UI界面可以说都离不开它,它的基本属性如下: 一.rect transform组件: rect trans ...
- 一台电脑上同启动两个Tomcat的方式,windows/Linux配置。
安装两个jdk,一个JDK路径在:C:\ProgramFiles (x86)\Java\jdk1.7.0_25,另外一个JDK的路径在E:\UCMSServer\j2sdk 在环境变量里并设置J ...
- 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(二)
4.1 构建我们自己的映像 构建Docker映像有两种方法: •通过docker commit(提交)命令 •通过docker build(构建)命令以及Docker文件(Dockerfile) 目前 ...
- JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用
JAVA之旅(十八)--基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用 JAVA把完事万物都定义为对象,而我们想使用数据 ...
- JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止
JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...
- 高通平台手机开发之LCD
4.1. LCD 参考文档: 1) 80-NA157-174_E_DSI_Programing_Guide_B-Family_Android_Devices.pdf 2) 80-NN766-1_A_L ...
- EventBus的其他常用函数
上一篇EventBus最简易使用方式介绍了EventBus最简易的使用方式,摆脱了叽里呱啦+图片的长篇大论.目的是为了让刚开始接触的人们不晕头转向.那么这篇..我也要开始图片+叽里呱啦了. 转载请注明 ...
- wing带你玩转自定义view系列(3)模仿微信下拉眼睛
发现了爱神的自定义view系列,我只想说一个字:凸(艹皿艹 ) !!相见恨晚啊,早看到就不会走这么多弯路了 另外相比之下我这完全是小儿科..所以不说了,这篇是本系列完结篇....我要从零开始跟随爱哥脚 ...
- 一个小公式帮你轻松将IP地址从10进制转到2进制
网络工程师经常会遇到的一个职业问题:如何分配IP,通过子网如何捕捉某一网段或某台机器?他们甚至能够进行精准的分析和复杂的开发......凡此种种,其实与一些他们头脑中根深蒂固的常识性理论存有某种内在的 ...
- 【61】git项目实战的步骤总结
1.新建分支的步骤 git pull git checkout -b 分支号(task的后面的代号) 2.提交代码到远程仓库的步骤 git add . git commit -m "分支号+ ...