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

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
 
View Code

相关文章:

  • 2021-10-05
  • 2021-12-16
  • 2021-07-08
  • 2022-12-23
  • 2021-11-21
  • 2022-12-23
猜你喜欢
  • 2021-10-19
  • 2021-06-15
  • 2021-08-26
  • 2021-11-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案