SQLserver使用sql语句创建主键,外键,唯一约束,自增

server/2024/9/24 15:14:22/

在 SQL Server 中,可以通过 SQL 语句在创建表时或在现有表上添加约束,如主键(PRIMARY KEY)、外键(FOREIGN KEY)、唯一约束(UNIQUE)和自增(IDENTITY)。以下是如何使用 SQL 语句来实现这些约束的示例。

创建主键(PRIMARY KEY)

主键用于在表中定义一个或多个列,这些列的组合必须是唯一的,并且不能包含 NULL 值。

CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName NVARCHAR(50),LastName NVARCHAR(50)
);

创建外键(FOREIGN KEY)

外键用于在两个表之间建立链接,确保引用的数据完整性。

CREATE TABLE Orders (OrderID INT PRIMARY KEY,CustomerID INT,EmployeeID INT,FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);

在这个例子中,Orders 表中的 EmployeeID 列引用了 Employees 表中的 EmployeeID 列。

创建唯一约束(UNIQUE)

唯一约束确保列中的所有值都是唯一的。

CREATE TABLE Products (ProductID INT PRIMARY KEY,ProductName NVARCHAR(100) UNIQUE
);

创建自增列(IDENTITY)

自增列用于自动生成唯一的值,通常用于主键。

CREATE TABLE Employees (EmployeeID INT PRIMARY KEY IDENTITY(1,1),FirstName NVARCHAR(50),LastName NVARCHAR(50)
);

在这个例子中,EmployeeID 列被设置为自增列,起始值为 1,每次增加 1。

在现有表上添加主键

ALTER TABLE Employees
ADD CONSTRAINT PK_Employees PRIMARY KEY (EmployeeID);

在现有表上添加外键

ALTER TABLE Orders
ADD CONSTRAINT FK_Orders_Employees FOREIGN KEY (EmployeeID)
REFERENCES Employees(EmployeeID);

在现有表上添加唯一约束

ALTER TABLE Products
ADD CONSTRAINT UQ_Products_ProductName UNIQUE (ProductName);

在现有表上添加自增属性

-- 首先,如果列已经存在,你需要先删除它
ALTER TABLE Employees DROP COLUMN EmployeeID;
​
-- 然后,重新添加列并设置为自增
ALTER TABLE Employees
ADD EmployeeID INT IDENTITY(1,1);

请注意,自增属性只能在创建列时设置,不能在现有列上修改。如果你需要将现有列设置为自增,你必须先删除该列,然后重新创建它。

注意事项

  • 在创建外键时,被引用的列(在本例中为 Employees 表的 EmployeeID 列)必须已经定义为主键或具有唯一约束。

  • 在创建唯一约束时,被约束的列不能包含重复的值。

  • 在设置自增属性时,你可以选择起始值和增量。如果不指定,SQL Server 将默认从 1 开始,增量为 1。

  • 在添加或修改表结构时,确保考虑数据完整性和性能影响。


http://www.ppmy.cn/server/106235.html

相关文章

【蓝桥杯集训100题】scratch绘制扇子 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第28题

scratch绘制扇子 蓝桥杯集训100题第28题模拟练习解析 此题曾经作为第十届省赛的真题考过 一、题目要求 以坐标(0,0)点为中心绘制一把扇子;扇面和扇把都是三分之一圆,扇面的半径 为 100 左右,扇把的半径为 20 左右。 编程实现 每次点击绿旗后,舞台背景为白色,…

解锁 TypeScript Record 的奇妙用法:轻松搞定键值对!

在没有非常了解 Record 之前,定义对象的类型,一般使用 interface。它是 TS 中定义数据结构的一种方式,用来描述对象的形状、函数类型、类的结构等。 // 基本用法 interface User {name: string;age: number;isAdmin: boolean; }const user: …

如何使用ssm实现基于java的小型超市管理系统+vue

TOC ssm195基于java的小型超市管理系统vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让…

在C#中应用命令模式:设计和实现的最佳实践

在C#中应用命令模式:设计和实现的最佳实践 引言 在软件设计中,设计模式是解决常见问题的通用解决方案。命令模式(Command Pattern)是行为型设计模式之一,它将请求或操作封装为对象,从而使得你可以用不同的…

在 MyBatis 中进行一对多的连表子查询

在 MyBatis 中进行一对多的连表子查询 一、前言 一、前言 在 MyBatis 中进行一对多的连表子查询时,通常会用到 Select 注解或 XML 配置文件来编写 SQL 查询。以下是一个简单的示例,展示如何在 MyBatis 中处理一对多的连表子查询。 假设我们有两个表&am…

钓鱼的常见几种方式

钓鱼的多种方式 office钓鱼攻击 宏与宏病毒 # 宏 宏是office自带的一种高级脚本特性,通过VBA代码,可以在office中去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中一些任务自动化# 宏病毒 宏病毒是一种寄存在文…

flink 使用RocksDB作为状态后端

RocksDB flink在生产环境中常用RocksDB作为状态后端 1、subtask在taskmanager中作为一个线程运行,如果设置了RocksDB状态后端,RocksDB也会启动一个独立的线程,供subtask来使用。 2、RocksDB是一个kv数据库,因此只能存储flink的键…

zookeeper服务搭建

zookeeper服务搭建 前言1. 前置准备2. 下载和解压Zookeeper3. 配置环境变量4. 编辑Zookeeper配置文件5. 配置Zookeeper节点ID6. 配置好的Zookeeper分发到其他节点7. 启动Zookeeper集群参考博客 前言 Zookeeper是一个开源的分布式协调服务,主要用于解决分布式应用中的…