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

TSQL--约束基础和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

 
View Code
TSQL--约束基础和Demo
 --===============================================

--在创建表时指定主键,并且生出非聚簇索引

CREATE TABLE TB16

(

   ID INT IDENTITY(1,1),

   C1 INT NOT NULL,

   CONSTRAINT pk_TB15_ID PRIMARY KEY NONCLUSTERED(ID)

)



--在新建主键或唯一约束是,使用WITH NOCHECK来避免检查当前数据

--默认条件下主键约束会附带生成聚簇索引,而唯一约束会附带生成非聚簇索引。
View Code
TSQL--约束基础和Demo
--==============================

--在表创建时使用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
View Code
TSQL--约束基础和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

 

 

 
View Code

 

你可能感兴趣的:(demo)