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

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

TSQL--约束基础和Demo的更多相关文章

  1. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  2. T-SQL语言基础(1)之理论背景

    从学校就开始接触和使用 SQL 了,但一直没有怎么细细去了解它,最近入职的公司比较重 T-SQL 部分,所以就准备系统的学习一下. 买了一本<Microsoft SQL Server 2008 ...

  3. 《microsoft sql server 2008技术内幕 t-sql语言基础》

    第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...

  4. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

  5. T-SQL语言基础(转载)

    本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...

  6. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  7. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  8. T-Sql编程基础

    T-sql编程 入门小游戏 T-sql编程基础,包括声明变量,if判断,while循环,以及使用一些基本函数. 记得在学校的时候,写过一个二人对打的文字输出游戏. 上代码 alter proc usp ...

  9. SLAM入门之视觉里程计(2):两视图对极约束 基础矩阵

    在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过"小孔"映射到二维的图像平面,可以使用下面公式描述: \[ x = MX \]其中,\(c\)是图像中的像点,\(M\)是一 ...

  10. SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵

    在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过"小孔"映射到二维的图像平面,可以使用下面公式描述: \[ x = MX \]其中,\(c\)是图像中的像点,\(M\)是一 ...

随机推荐

  1. 初识tornado

    Tornado 参考:  http://www.cnblogs.com/wupeiqi/articles/5702910.html Tornado 是 FriendFeed 使用的可扩展的非阻塞式 w ...

  2. 通过CSS 给界面必选项添加星号

    在制作网页的时候,如果一个选项是必填的,通常会给选项添加一个红色星号,来引起用户的注意:最近笔者刚好遇见一个类似的需求,本来可以用html标签和style就可搞定,由于笔者需要改动的界面比较多(六个) ...

  3. VS编译静态库 .lib 其中Release 版本比Debug版本要大好多原因

    如果工程代码使用了: 把此选项关闭即可减少库大小不少:

  4. SPI protocol驱动编写实例

    内核版本:3.9.5 Linux中SPI驱动有俩个部分组成:controller驱动,直接和底层硬件打交道,protocol驱动,针对特定的设备,也是我们要做的. 这里只考虑SPI protocol驱 ...

  5. vs code 配置spring boot开发环境

    一.环境变量 jdk环境变量一键设置 管理員运行 - 一支小白 - 博客园https://www.cnblogs.com/startnow/p/7416533.html 二.安装插件 1.Java E ...

  6. 从Oracle数据库中查询与某一时间点最接近的记录

    select * from data_taskregionschedule WHERE regioncode='HYL' and updatetime-to_date('2018-05-15','yy ...

  7. list count++

    AtomicInteger count = customTypeCounter.get(order.getCustomerType()); if (count == null) { count = n ...

  8. charles4.2下载与破解方法以及配置https.RP

    Charles下载地址 地址:https://www.charlesproxy.com/latest-release/download.do 2. Charles破解 破解地址:https://www ...

  9. input修改placeholder中颜色和字体大小

    input::-webkit-input-placeholder { /* placeholder颜色 */ color: #aab2bd; /* placeholder字体大小 */ font-si ...

  10. [GO]简单的并发服务器

    package main import ( "net" "fmt" "strings" ) func HandleConn(conn net ...