--============================================================

SQL SERVER 中使用constraint和role来对数据进行限制,role需要先创建,再应用到指定的表和列上,role可以被应用到多个对象上。而constraint只能针对单一对象,处理的问题更多一些,constraint可以跨越多个表处理,如限制某个表中输入的值不能大于另一表的最大值,role无法实现这样的需求。通常优先考虑使用constraint来实现对数据的限制。

SQL Server中约束有:
check constraint
unique constraint
primary key constraint
default constraint

可以使用
SELECT * FROM SYS.default_constraints
SELECT * FROM sys.check_constraints
select * from sys.key_constraints
来查看约束

--============================================================

完整性检查顺序

1. 应用适当的默认值
2. 检查NOT NULL
3. check constraint
4. 对引用表的外键约束
5. 对被引用表的外键约束
6. 唯一或主键约束
7. 触发器

--============================================================

约束的一些Demo

--======================================
--创建表时创建check约束
CREATE TABLE TB14
(
ID INT IDENTITY(1,1),
C1 INT,
CONSTRAINT chk_TB14_C1 CHECK(C1>0)
)
--======================================
--修改表创建check约束
CREATE TABLE TB15
(
ID INT IDENTITY(1,1),
C1 INT
) ALTER TABLE TB15
ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0)
--======================================
--修改表创建check约束,并且不检查已有数据
CREATE TABLE TB15
(
ID INT IDENTITY(1,1),
C1 INT
)
INSERT INTO TB15(C1)
SELECT -1 ALTER TABLE TB15
WITH NOCHECK
ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0) --======================================
--禁用已有约束
ALTER TABLE TB15
NOCHECK CONSTRAINT chk_TB15_C1 INSERT INTO TB15(C1)
SELECT -1
--======================================
--启用用已有约束
ALTER TABLE TB15
CHECK CONSTRAINT chk_TB15_C1
 --===============================================
--在创建表时指定主键,并且生出非聚簇索引
CREATE TABLE TB16
(
ID INT IDENTITY(1,1),
C1 INT NOT NULL,
CONSTRAINT pk_TB15_ID PRIMARY KEY NONCLUSTERED(ID)
) --在新建主键或唯一约束是,使用WITH NOCHECK来避免检查当前数据
--默认条件下主键约束会附带生成聚簇索引,而唯一约束会附带生成非聚簇索引。
--==============================
--在表创建时使用DEFAULT 约束
CREATE TABLE TB12
(
ID INT IDENTITY(1,1),
C1 INT DEFAULT 0
)
--==============================
--在修改表时使用DEFAULT 约束
CREATE TABLE TB13
(
ID INT IDENTITY(1,1),
C1 INT NOT NULL,
C2 INT NOT NULL
) ALTER TABLE TB13
ADD CONSTRAINT DF_TB13_ID DEFAULT 0 FOR C1 --=======================================
--在插入时显式使用默认值
INSERT INTO TB12(C1)
VALUES(DEFAULT) --=======================================
--在插入时隐式使用默认值
INSERT INTO TB13(C2)
VALUES(1)
--=======================================
--在更新时显式使用默认值
UPDATE TB12
SET C1=DEFAULT
--======================================
--创建表时创建check约束
CREATE TABLE TB14
(
ID INT IDENTITY(1,1),
C1 INT,
CONSTRAINT chk_TB14_C1 CHECK(C1>0)
)
--======================================
--修改表创建check约束
CREATE TABLE TB15
(
ID INT IDENTITY(1,1),
C1 INT
) ALTER TABLE TB15
ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0)
--======================================
--修改表创建check约束,并且不检查已有数据
CREATE TABLE TB15
(
ID INT IDENTITY(1,1),
C1 INT
)
INSERT INTO TB15(C1)
SELECT -1 ALTER TABLE TB15
WITH NOCHECK
ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0) --======================================
--禁用已有约束
ALTER TABLE TB15
NOCHECK CONSTRAINT chk_TB15_C1 INSERT INTO TB15(C1)
SELECT -1
--======================================
--启用用已有约束
ALTER TABLE TB15
CHECK CONSTRAINT chk_TB15_C1

最新文章

  1. Linux笔记之——Linux关机命令详解(转)
  2. static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数
  3. [solr] - 环境搭建2
  4. 团队项目作业第二项:利用NABCD模型进行竞争性需求分析
  5. PAT乙级 1009. 说反话 (20)
  6. linux设备驱动编写_tasklet机制(转)
  7. 解决oracle11g安装导致数据库无法自动搜集统计信息-转
  8. python 数据结构-列表
  9. UVA 439 Knight Moves
  10. 如何在Linux下重命名多个文件
  11. HTML中的转义字符
  12. android 12 click事件的不同实现方式
  13. 《Language Implementation Patterns》之 解释器
  14. [bzoj4873]寿司餐厅
  15. C#System.Text.RegularExpressions.Regex使用(一) .
  16. JavaScript基本概念
  17. CRM 模拟用户
  18. 如何配置Java环境变量[转]
  19. Windows Server 2008 R2微软官方下载
  20. 注解Annotation补充介绍

热门文章

  1. 使用Spring MVC创建 REST API
  2. Tomcat集群---Cluster节点配置
  3. 简述amixer及其用法
  4. golang怎么使用redis,最基础的有效的方法
  5. 把http网站改为Https网站
  6. Docker03 Docker基础知识、Docker实战
  7. 常见的移动端Web页面问题解决方案
  8. Nmap扫描参数解析
  9. UVa10859 放置街灯
  10. [Training Video - 4] [Groovy] Optional parameter in groovy