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\)是一 ...
随机推荐
- Python基础学习九 单元测试
import unittest import HTMLTestRunner #产生测试报告 from BeautifulReport import BeautifulReport def calc(x ...
- java第三方类库实现图片等比缩放
public class ThumbnailTest { public static void main(String[] args) { InputStream is = null; try { / ...
- 好一个Time_Wait状态(TCP/IP)
首先简单介绍一下Time_Wait是个什么鬼: 在TCP/IP协议中,我们都知道有三次握手四次挥手的过程,先来一个简单的图: 各个状态和基本的过程想必了解过TCP/IP协议的人都清楚,本次介绍的主题只 ...
- 前端开发之CSS篇四
一.相对定位 二.绝对定位 三.固定定位 四.z-index 前言 定位有三种:1.相对定位 2.绝对定位 3.固定定位 这三种定位,每种都暗藏玄机,所以要每个单独剖析. 1️⃣ 相对定位 1.三 ...
- spring的传播行为和隔离级别
7个传播行为,4个隔离级别(转自 http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html) Spring事务的传播行为和隔 ...
- C#中使用OracleTransaction
1. OracleTransaction类的概述(from msdn ) 应用程序通过针对OracleConnection对象调用 BeginTransaction 来创建OracleT ...
- java算法 第七届 蓝桥杯B组(题+答案) 6.方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...
- Spark之 Spark Streaming整合kafka(并演示reduceByKeyAndWindow、updateStateByKey算子使用)
Kafka0.8版本基于receiver接受器去接受kafka topic中的数据(并演示reduceByKeyAndWindow的使用) 依赖 <dependency> <grou ...
- 如何debug?(转载)
本文属于转载,原文地址如下: https://blog.csdn.net/zhao4zhong1/article/details/53078924 一.码畜:靠编译器帮自己查语法错误 消灭笔误:编写适 ...
- GameObject.Find 使用技巧
GameObject.Find是全局搜索 如果你已经知道这个元件在哪个元件里面的话,且担心场景中有重名元件,可以这样写 GameObject.Find ("Canvas/Panel/Imag ...