TSQL--约束基础和Demo
--============================================================
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的更多相关文章
- 2008技术内幕:T-SQL语言基础
2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...
- T-SQL语言基础(1)之理论背景
从学校就开始接触和使用 SQL 了,但一直没有怎么细细去了解它,最近入职的公司比较重 T-SQL 部分,所以就准备系统的学习一下. 买了一本<Microsoft SQL Server 2008 ...
- 《microsoft sql server 2008技术内幕 t-sql语言基础》
第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...
- 2008技术内幕:T-SQL语言基础 单表查询摘记
这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...
- T-SQL语言基础(转载)
本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- T-Sql编程基础
T-sql编程 入门小游戏 T-sql编程基础,包括声明变量,if判断,while循环,以及使用一些基本函数. 记得在学校的时候,写过一个二人对打的文字输出游戏. 上代码 alter proc usp ...
- SLAM入门之视觉里程计(2):两视图对极约束 基础矩阵
在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过"小孔"映射到二维的图像平面,可以使用下面公式描述: \[ x = MX \]其中,\(c\)是图像中的像点,\(M\)是一 ...
- SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵
在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过"小孔"映射到二维的图像平面,可以使用下面公式描述: \[ x = MX \]其中,\(c\)是图像中的像点,\(M\)是一 ...
随机推荐
- Java使用 VelocityEngine模板引擎快速生成HTML等各种代码
https://blog.csdn.net/icannotdebug/article/details/79725297 一.简介 Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言 ...
- 太白老师day6 1.代码块 2.is==id 3.小数据池
1.代码块: 一个模块一个函数一个类,一个文件都是代码块 在交互模式下, 每一行都是一个代码块 2. is == 内存地址 就是id门牌号 在内存中id是唯一,如果两个变量指向的id相同,那么他们在内 ...
- MySQL修改redo_log_size
MySQL5.5 步骤如下: 1. set global innodb_fast_shutdown = 0; 2. mysqladmin shutdown 3. 修改my.cnf innodb_log ...
- 无法访问win8默认共享(如C$)解决办法
可以使用此过程允许作为本地 Administrators 组的成员并使用密码身份验证登录的用户在会话过程中使用其管理权限.启动注册表编辑器.单击“开始”,在“开始搜索”框中键入 regedit,然后按 ...
- 简单的mysql热备
最近一直担心数据出问题,还好领导给了一台备用机,装好mysql后搜了下mysq热备相关的帖子,看似好繁琐,自己大概配置了一下擦发现起始很简单! 下边就是步骤了! 1.修改主从mysql配置文件,在my ...
- flutter 交互提示方式
交互提示方式dialog和snackbar 首先看看dialog的方式 new PopupMenuButton( icon: new Icon(Icons.phone_iphone, color: C ...
- UGUI 自动布局的重叠BUG
1,父级使用了verticalLayout(注意没有ContentSizeFilter),子级使用了ContentSizeFilter时,点击Apply常常发现,本来布局好的UI突然重叠到了一起,或位 ...
- 【LA3523 训练指南】圆桌骑士 【双连通分量】
题意 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置.如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是奇数,以防赞同和反 ...
- 高性能Web服务器Nginx的配置与部署研究(9)核心模块之HTTP模块基本常用指令
一.HTTP模块的作用是什么? Nginx的HTTP模块用于控制Nginx的HTTP进程. 二.指令 1. alias 含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适 ...
- 253. Meeting Rooms II 需要多少间会议室
[抄题]: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],.. ...