当前位置: 首页 > article >正文

SQL Server约束

### 1. 主键约束(PRIMARY KEY)

- **作用**:用于唯一标识表中的每一行记录,确保表中不会存在两条主键值相同的记录,且主键列不允许为 `NULL`。一个表只能有一个主键,但主键可以由多个列组成(复合主键)。

- **示例**:

-- 创建一个包含主键约束的表 
CREATE TABLE Students ( StudentID INT PRIMARY KEY, StudentName NVARCHAR(50) );

``` 在上述示例中,`StudentID` 列被定义为主键,保证了每个学生的 `StudentID` 是唯一的。

### 2. 唯一约束(UNIQUE)

- **作用**:确保表中某一列或多列组合的值是唯一的,但与主键约束不同的是,唯一约束允许列值为 `NULL`,且一个表可以有多个唯一约束。

- **示例**:
 

-- 创建一个包含唯一约束的表

CREATE TABLE Employees ( EmployeeID INT, Email NVARCHAR(100), UNIQUE (Email) );

在这个例子中,`Email` 列被设置为唯一约束,保证了每个员工的邮箱地址是唯一的。

### 3. 外键约束(FOREIGN KEY)

- **作用**:用于建立和加强两个表之间的关联,确保一个表中的外键列值必须与另一个表中主键列的值相匹配,从而维护表之间的数据一致性。

- **示例**:
 

-- 创建主表

Departments CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName NVARCHAR(50) );

-- 创建从表 Employees,包含外键约束

CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, EmployeeName NVARCHAR(50), DepartmentID INT, FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) );

``` 在上述代码中,`Employees` 表的 `DepartmentID` 列是外键,它引用了 `Departments` 表的 `DepartmentID` 主键,确保 `Employees` 表中的每个员工所属的部门在 `Departments` 表中是存在的。

### 4. 检查约束(CHECK)

- **作用**:用于限制列中可以插入的值的范围,确保列中的数据满足指定的条件。

- **示例**:

-- 创建一个包含检查约束的表 
CREATE TABLE Products ( ProductID INT PRIMARY KEY, ProductName NVARCHAR(50), Price DECIMAL(10, 2), CHECK (Price > 0) );

``` 在这个例子中,`CHECK` 约束确保 `Price` 列的值必须大于 0。

### 5. 默认约束(DEFAULT)

- **作用**:

为列指定一个默认值,当插入数据时,如果没有为该列提供值,则使用默认值。

- **示例**:

-- 创建一个包含默认约束的表 
CREATE TABLE Orders ( OrderID INT PRIMARY KEY, OrderDate DATE DEFAULT GETDATE(), OrderStatus NVARCHAR(20) DEFAULT 'Pending' );

``` 在上述代码中,`OrderDate` 列的默认值为当前日期(使用 `GETDATE()` 函数获取),`OrderStatus` 列的默认值为 'Pending'。

### 约束的管理

除了在创建表时定义约束,还可以在表创建后使用 `ALTER TABLE` 语句来添加、修改或删除约束。

例如,添加一个唯一约束:
-- 为 Employees 表的 EmployeeCode 列添加唯一约束 
ALTER TABLE Employees ADD CONSTRAINT UQ_EmployeeCode UNIQUE (EmployeeCode);
``` 删除约束:
-- 删除 Employees 表的 UQ_EmployeeCode 唯一约束 
ALTER TABLE Employees DROP CONSTRAINT UQ_EmployeeCode;


http://www.kler.cn/a/522501.html

相关文章:

  • 机器人抓取与操作概述(深蓝)——1
  • 图漾相机——C++语言属性设置
  • 元素的显示与隐藏
  • vue-有关于TS与路由器
  • 【C++题解】1393. 与7无关的数?
  • olloama下载deepseek-r1大模型本地部署
  • FPGA 使用 CLOCK_LOW_FANOUT 约束
  • 简易CPU设计入门:控制总线的剩余信号(二)
  • 双向链表在系统调度、游戏、文本编辑及组态方面的应用
  • 【llm对话系统】LLM 大模型Prompt 怎么写?
  • 2025多目标优化创新路径汇总
  • 快速生成2D卡通人物的AI工具:开启Live2D角色创作的新时代
  • SuperAGI - 构建、管理和运行 AI Agent
  • CAN总线数据采集与分析
  • React第二十六章(createPortal)
  • 学习率衰减策略
  • 常见字符串相关题目
  • Linux之内存管理前世今生(一)
  • 【公式】卢布贬值风险:义乌到俄罗斯贸易的汇率陷阱
  • 图漾相机搭配VisionPro使用简易教程
  • 异或哈希总结
  • 【信息系统项目管理师-选择真题】2013上半年综合知识答案和详解
  • ubuntu x64下交叉编译ffmpeg到目标架构为aarch架构的系统
  • 基于STM32的阿里云智能农业大棚
  • 「 机器人 」扑翼飞行器数据驱动建模浅谈
  • Reinforcement learning 强化学习