Sql server 2008 数据库的完整性约束
作者:网络转载 发布时间:[ 2015/11/16 11:51:15 ] 推荐标签:数据库
三、约束
SQLServer2008提供的强制数据完整性的机制:
①PRIMARYKEY约束
②FOREIGNKEY约束
③UNIQUE约束
④CHECK约束
⑤NOTNULL(非空性)
⑥IDENTITY约束
使用约束优先于使用触发器、规则和默认值
查询优化器使用约束定义生成高性能的查询执行计划
①PRIMARYKEY约束:
可以在下面情况下使用:
(1)作为表定义的一部分在创建表时创建。
(2)添加到尚没有PRIMARYKEY约束的表中(一个表只能有一个PRIMARYKEY约束)。
(3)如果已有PRIMARYKEY约束,则可对其进行修改或删除。
特点:
(1)每个表都应有一个主键,主键值。
(2)主键内的任何列不能为空(null)。
(3)要使用TRansact-SQL修改PRIMARYKEY,必须先删除现有的PRIMARYKEY约束,然后再重新创建。
(4)创建表时指定主键,sqlserver会自动创建一个名为“PK_”且后跟表名的主键索引。如果不指定索引类型,则默认为聚集索引。该索引只能在删除与它保持联系的表或主键约束时才能删除。
②FOREIGNKEY约束
标识表之间的关系,用于强制参照完整性,为表中一列或多列提供参照完整性。FOREIGNKEY约束也可以参照自身表中的其他列(例如:学生表中的“班长学号”列参照“学号”列),这种参照称为自参照。
FOREIGNKEY约束可以在下面情况下使用:
(1)作为表定义的一部分在创建表时创建。
(2)如果现有表的某列与另一个表已有的PRIMARYKEY约束或UNIQUE约束相关联,则可向现有表添加FOREIGNKEY约束。
(3)对已有的FOREIGNKEY约束进行修改或删除。
使用FOREIGNKEY约束,应注意的几个问题:
(1)每个表多可以有253个FOREIGNKEY约束。
(2)FOREIGNKEY约束只能参照同一个数据库中的表,而不能参照其他数据库中的表。
(3)FOREIGNKEY子句中的列数目和每个列指定的数据类型必须和REFERENCES子句中的列相同。
(4)FOREIGNKEY约束不能自动创建索引。
(5)在临时表中,不能使用FOREIGNKEY约束。
(6)如果一个外键没有对应的主键值,则不能插入带该值的行。
③UNIQUE约束
(1)UNIQUE约束在列集内强制执行值的性。
(2)对于UNIQUE约束中的列,表中不允许有两行包含相同的非空值。
(3)SQLServer创建了UNIQUE约束后会自动创建UNIQUE索引来强制UNIQUE约束的性要求。
(4)如果插入重复行,SQLServer将返回错误信息。
(5)向表中的现有列添加UNIQUE约束时,默认情况下SQLServer2008检查列中的现有数据确保除NULL外的所有值均。
(6)UNIQUE约束与主键约束的区别:主键也强制执行性,但主键不允许空值,而且每个表中主键只能有一个,但UNIQUE列可以有多个,可以取空值。
(7)UNIQUE约束优先于索引。
④CHECK约束
(1)CHECK约束通过限制用户输入的值来加强域完整性。
(2)它指定应用于列中输入的所有值的布尔(取值为TRUE或FALSE)搜索条件,拒绝所有不取值为TRUE的值。
(3)可以为每列指定多个CHECK约束。
⑤IDENTITY约束
自动编号约束又称作标识列,采用数字编号的方式依次增加一个增量。是为那些数字顺序递增的列准备的约束,可以自动完成数值添加。
(1)标识种子
(2)标识增量
(3)标识列的数据类型
四、完整性约束命名子句
完整性约束命名子句的格式:
CONSTRAINT<完整性约束条件名>[PRIMARYKEY短语|FOREIGNKEY短语|CHECK短语]
例:建立学生登记表Student2,要求学号在10000至99999之间,姓名不能取空值,年龄小于30,性别‘男’或‘女’:
1CREATETABLEStudent2(
2snointCONSTRAINTC1CHECK(snoBETWEEN10000AND99999),
3snameCHAR(8)CONSTRAINTC2NOTNULL,
4sageintCONSTRAINTC3CHECK(sage<30),
5ssexVARCHAR(2)CONSTRAINTC4CHECK(ssexIN('男','女')),
6CONSTRAINTSKPRIMARYKEY(Sno)
7);
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
远程连接sql server 2000服务器的解决方案SQL Server修改数据库物理文件存在位置探讨SQL Server并发处理队列数据不阻塞解决方案迁移SQL Server到Azure SQL实战SQL SERVER 的前世今生?各版本功能对比SQL Server的WITH (NOLOCK)SQL Server如何用触发器捕获DML操作的会话信息SQL Server里书签查找的性能伤害监控SQL Server事务复制SQL Server数据库镜像下有效的索引维护SQL Server不停机移动镜像数据库SQL Server数据库备份压缩拷贝实例SQL Server数据库优化SQL SERVER的统计信息SQL Server里如何处理死锁SQL SERVER批量生成编号
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南