SQL 主键:创建并添加到现有表中

⚡ 智能摘要

在 SQL Server 中,主键是一列或一组列,其值唯一标识表中的每一行。每个表都有一个主键,并且其列的值不能为 NULL。

  • ???? 什么是主键: 主键是一个或多个列,其值是唯一的,用于标识表中的每一行。
  • 🚫 核心规则: 一个表只能有一个主键,每个值都必须是唯一的,并且任何键列都不能包含 NULL 值。
  • 🖱️ 两种创作方法: SQL Server Management Studio 表设计器和 T-SQL CREATE TABLE 语句都可以定义主键。
  • 🧱 约束条款: 在 CREATE TABLE 语句中,CONSTRAINT … PRIMARY KEY 子句指定键并列出其对应的列。
  • 添加到现有表格: ALTER TABLE … ADD CONSTRAINT 向现有表中的 NOT NULL 列添加主键。
  • 🧩 复合密钥: 主键最多可以组合 16 列,形成一个在整个数据集中唯一的复合键。

SQL Server 主键:如何创建和向现有表中添加主键

SQL中的主键是什么?

主键 SQL服务器 主键是用于唯一标识一条记录的字段(或字段组合)。它是一列或一组列,其中每个值都是唯一的。换句话说,任何两行都不能共享同一个主键值。

主键规则

  • 每个表只能有一个主键。
  • 所有值都是唯一的,主键值可以唯一标识每一行。
  • 系统不允许插入主键值已存在于表中的行。
  • 主键不能为空。

下图总结了以上关于 SQL 主键的所有要点。

图表总结了 SQL 主键规则:唯一值,每个表一个主键,且不能为空。

如何在 SQL Server 中创建主键

创建主键有两种方法:

让我们详细研究每种方法。

SQL Server Management Studio中

步骤 1)右键单击表名并单击 工艺设计.

右键单击该表,然后选择“在 SQL Server Management Studio 中设计”。

步骤 2)右键单击列名并单击 设置主键.

右键单击该列,然后在表设计器中选择“设置主键”。

结果:Course_Id 现在是主键,列旁边会显示一个钥匙图标。

Course_Id 列以钥匙图标标记,作为主键

T-SQL:创建新表时创建主键

以下是语法 创建一个表 使用来自 T-SQL 的主键。

语法:

CREATE TABLE <Table_Name>
(
Column1 datatype,
Column2 datatype,CONSTRAINT <Name> PRIMARY KEY (Column name)
.
);

这里,CONSTRAINT 指定了主键,PRIMARY KEY 标记了必须保持唯一的列,并且每一列也都需要一个主键。 数据类型.

让我们创建一个包含一列作为 SQL 主键的表。

查询:

CREATE TABLE COURSE_TSQL_PK 
(Course_ID Int not Null,
 Course_name Varchar(20)
 CONSTRAINT PK PRIMARY KEY (Course_ID)	
)

步骤 1)点击运行查询 演练:.

执行定义 Course_ID 主键的 CREATE TABLE 查询

结果:Course_Id 现在是 COURSE_TSQL_PK 表的主键。

COURSE_TSQL_PK 表显示 Course_ID 设置为主键

例如:让我们看看是否允许输入多个具有相同课程 ID 的记录。

步骤 1)插入四行,每行具有不同的 Course_ID 值。

Insert into COURSE_TSQL_PK values (1,'SQL');
Insert into COURSE_TSQL_PK values (2,'Python');
Insert into COURSE_TSQL_PK values (3,'SQL');
Insert into COURSE_TSQL_PK values (4,'C');

步骤 2)运行 SELECT 查询,验证所有数据是否已成功插入。

SELECT 查询结果显示四行,每行都有不同的 Course_ID 值。

注意:您可以在非主键列中插入重复值。

步骤 3)现在让我们尝试插入一条具有现有 Course_ID(主键)的新记录。

Insert into COURSE_TSQL_PK values (4,'JAVA');

结果:系统不允许插入新值,因为 Course_ID 列(主键)中已经存在值 4。

错误消息:拒绝 Course_ID 的重复主键值。

如何在 SQL 中向现有表添加主键?

现在我们将学习如何在 SQL 中向现有表中添加主键。

您可以使用 ALTER 语句创建主键。但是,主键只能在定义为 NOT NULL 的列上创建。您不能在允许 NULL 值的列上创建主键;如果某个列当前允许 NULL 值,则必须先将其更改为 NOT NULL,或者删除并重新创建该表。

这是语法:

ALTER TABLE tableName
ADD CONSTRAINT constraintName PRIMARY KEY (column_1, column_2, ... column_n);

例如:

ALTER TABLE students
ADD CONSTRAINT students_pk PRIMARY KEY (admission);

使用 ALTER TABLE 语句添加名为 students_pk 的主键约束

我们为现有表添加了主键约束。约束已添加到 admission 列,并指定名称为 students_pk。

有趣的事实!

  • 主键可以是多个列的组合。这种组合称为复合主键。
  • 主键最多可以有 16 列。

常见问题

两者都强制执行唯一性。一个表只允许有一个主键,且其列不能为 NULL。一个表可以包含多个唯一键,并且每个唯一列可以接受一个 NULL 值。主键通常用于定义主行标识符。

是的。SQL Server 会自动创建一个唯一索引来强制执行主键。默认情况下,此索引是聚集索引,它会对行进行物理排序。如果另一个列已经存在聚集索引,则可以指定 NONCLUSTERED 索引。

复合主键将两列或多列组合在一起,即使每列的值单独重复,也能保证它们之间的唯一性。SQL Server 允许主键最多跨越 16 列,总长度为 900 字节。

主键唯一标识其所在表中的每一行,并且不允许出现 NULL 值。 外键 存储的值必须与另一个表中的主键或唯一键匹配,从而在两个表之间建立关系。

运行 ALTER TABLE table_name DROP CONSTRAINT constraint_name。您必须知道约束名称,该名称可在 sys.key_constraints 中找到。删除ping 主键还会删除其支持的唯一索引以及任何引用它的外键。

自动生成数字的标识列是一种常用的代理主键,因为它具有窄化、稳定性强且永不为空的特点。只有当现有列(例如产品代码)已保证唯一时,才应选择自然键。

是的。 GitHub 副驾驶 可以根据自然语言提示编写 CREATE TABLE 语句和 PRIMARY KEY 约束,并建议合适的键列。务必检查生成的键、数据类型和空值处理规则,并在生产环境运行脚本之前进行测试。

人工智能和机器学习工具会分析样本数据和查询模式,以推荐哪些列应该作为主键,标记包含重复项或空值的候选键,并建议代理键。开发人员会在应用每项建议之前进行确认。

总结一下这篇文章: