Sqlserver 约束简介

本文详细介绍了数据库中的各种约束机制,包括非空约束、主键约束、唯一约束、默认约束、检查约束及外键约束等,并提供了具体的SQL语句示例。

数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
非空约束
主键约束(PK) primary key constraint 唯一且不为空
唯一约束 (UQ)unique constraint 唯一,允许为空,但只能出现一次
默认约束 (DF)default constraint 默认值
检查约束 (CK)check constraint 范围以及格式限制
外键约束 (FK)foreign key constraint 表关系


--添加主键约束
alter table Score
add constraint  PK_Score primary key(sId)

 
--添加唯一约束
alter table student
add constraint UQ_student unique(sNo)


--添加默认约束
alter table student
add constraint DF_student default('男') for sSex

--添加检查约束
alter table student
add constraint CK_student check(sAge >=18 and sAge <=100)

alter table student
add constraint CK_Sutdent1 check(sSex='男' or sSex='女')

alter table student
add constraint CK_Student2 check(sIntime>sBirthday)          --入学日期必须大于出生日期

--添加外键约束(主键表Class 外键表student)
alter table student
add constraint FK_student
foreign key(sClassId) references Class(cId) --外键student表中的sClassId来references引用主键表中的cid
on delete cascade      --级联删除,添加约束的时候加上这个,删除主表的时候,会把外键对应的子表级联删除(慎用)
on update cascade      --级联更新
--删除约束
alter table student
drop constraint FK_student

 

 

--约束练习
--Teacher表中
--tSex  控制只能是男 女,默认男
--tAge  在30-40之间  默认30
--tName 唯一
alter table Teacher
add constraint CK_Teacher_tSex check(tSex='男' or tSex='女'),
constraint DF_Teacher_tSex default ('男') for tSex,
constraint CK_Teacher_tAge check(tAge>=30 and tAge <=40),
constraint DF_Teacher_tAge default (30) for tAge,
constraint UQ_Teacher_tName unique (tName)

 

 

--在建表的时候创建约束

--drop table Student0
create table Student0
(
 sId int identity(1,1) primary key,
 sName nvarchar(10) not null,
 sAge int constraint CK_Student0_sAge check(sAge >= 18) constraint DF_Student0_sAge default(18),
 sClassId int constraint FK_Student0_sClassId foreign key (sClassId) references Class(cId)
)

<think>好的,用户想了解SQL Server中的约束条件的使用方法和类型。首先,我需要回忆一下SQL Server中常见的约束类型,比如主键、外键、NOT NULL、唯一约束和检查约束。根据引用[1],这些是基本的约束类型,我应该先逐一介绍每个类型的作用和语法。 接下来,使用方法部分,我需要结合引用中的示例,比如引用[2]提到的添加检查约束的语法,还有引用[3]中的外键约束语法。要确保给出具体的SQL语句示例,这样用户能更清楚如何实际操作。例如,创建表时定义约束和修改表添加约束的区别。 然后,用户可能还会关心如何删除约束,引用[5]提到了删除约束的方法,这里可能需要解释如何查找约束名称并执行删除操作。这部分需要详细说明,因为删除约束可能涉及系统表查询,用户可能不熟悉。 另外,引用[4]提到外键约束需要注意数据一致性和级联操作,这部分应该在注意事项里强调,说明使用外键时的最佳实践,比如索引的使用和命名规范。 需要确保回答结构清晰,分点列出类型、使用方法、注意事项。可能用户对某些约束的具体应用场景不太清楚,比如检查约束和唯一约束的区别,这时候需要举例说明,比如年龄字段的范围检查,或者身份证号的唯一性约束。 还要注意引用文献的正确对应,比如在介绍外键时引用[3]和[4],在检查约束时引用[2]。最后生成的相关问题应该覆盖用户可能进一步想知道的内容,比如约束的优缺点、删除方法、外键的级联操作等。</think>### SQL Server约束条件详解 #### 一、约束类型及作用 1. **主键约束(PRIMARY KEY)** - 唯一标识表中的每行数据,不允许重复且不能为`NULL` - 示例:`CREATE TABLE Users (ID INT PRIMARY KEY, Name VARCHAR(50))`[^1] 2. **外键约束(FOREIGN KEY)** - 确保引用其他表的字段值存在,维护数据一致性 - 语法: ```sql ALTER TABLE Orders ADD CONSTRAINT FK_UserID FOREIGN KEY (UserID) REFERENCES Users(ID) ```[^3][^4] 3. **非空约束(NOT NULL)** - 强制字段必须包含值 - 示例:`CREATE TABLE Products (Price DECIMAL(10,2) NOT NULL)`[^1] 4. **唯一约束(UNIQUE)** - 保证字段值唯一但允许`NULL` - 示例:`ALTER TABLE Employees ADD CONSTRAINT UQ_Email UNIQUE (Email)`[^1] 5. **检查约束(CHECK)** - 限制字段值的范围或格式 - 示例: ```sql ALTER TABLE Students ADD CONSTRAINT CHK_Age CHECK (Age BETWEEN 16 AND 60) ```[^2] #### 二、使用方法 1. **创建表时定义约束** ```sql CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, DepartmentID INT FOREIGN KEY REFERENCES Departments(DepartmentID), Email VARCHAR(100) UNIQUE, Salary DECIMAL CHECK (Salary > 0) ) ``` 2. **修改表添加约束** - 添加外键: ```sql ALTER TABLE Orders ADD CONSTRAINT FK_CustomerID FOREIGN KEY (CustomerID) REFERENCES Customers(ID) ``` - 添加检查约束: ```sql ALTER TABLE Products ADD CONSTRAINT CHK_Stock CHECK (Stock >= 0) ``` 3. **删除约束** ```sql ALTER TABLE Employees DROP CONSTRAINT UQ_Email ``` 需先通过系统表查询约束名称(参考引用[^5]的脚本) #### 三、注意事项 1. 外键约束需确保引用表和被引用表使用相同存储引擎 2. 检查约束不支持子查询 3. 建议为外键字段创建索引以提高查询性能 4. 约束命名应遵循`类型_表名_字段名`格式(如`FK_Orders_CustomerID`)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值