MSSQL 主键——赋予表数据独一无二的力量

什么是主键

在数据库表中,主键是唯一标识表中每一条数据的字段或字段组合。主键可以让我们快速地找到或者编辑一条数据,是现代关系型数据库设计的核心理念之一。

主键的作用

确保数据唯一性

主键的第一个作用就是确保数据的唯一性。例如,我们有一个学生表,其中有两个学生名字都是“张三”,如果我们要找到其中的一位学生,没有主键的话就很困难了,很可能会找到两条数据都是“张三”的。

在这种情况下,我们可以使用一个学生 ID 来作为主键,确保每一个学生都有一个唯一的编号。这个编号可以是一个自增的数值,也可以是其他的方式,只要能够保证数据唯一即可。

提高查询性能

主键不仅可以确保数据唯一性,还可以提高查询性能。因为我们可以通过主键快速地找到一条数据。

例如,我们有一个订单表,其中包含订单号、客户 ID、订单日期等信息。我们现在要查找某一个客户的所有订单,如果我们使用客户名字作为查询条件,那么需要扫描整个表才能找到符合条件的订单。而如果我们使用客户 ID 作为主键,那么只需要定位到客户 ID 对应的一条数据即可,效率会大大提高。

如何创建主键

在 MSSQL 中,我们可以通过 ALTER TABLE 语句来为表添加主键。主键可以添加到一个或多个列上,被添加上的列称为主键列。

-- 为表添加单个主键

ALTER TABLE table_name

ADD CONSTRAINT pk_column_name PRIMARY KEY (column_name);

-- 为表添加多个主键

ALTER TABLE table_name

ADD CONSTRAINT pk_column1_column2 PRIMARY KEY (column1, column2);

在上面的代码中,pk_column_name 是主键的名称,可以自行定义。column_name 是主键列的名称。

如果我们要添加多个主键,可以在 CONSTRAINT 关键字后面指定主键的名称,然后在 PRIMARY KEY 括号内指定多个列名。

主键的使用注意事项

主键列不允许为空

在 MSSQL 中,主键列不允许为空。这是因为如果主键列为空,那么就无法唯一标识一条数据了。

因此,我们在创建主键时,需要确保主键列不为空。如果我们在插入数据时没有为主键列赋值,那么会抛出错误,如下所示:

-- 创建带有主键的表

CREATE TABLE demo (

id INT PRIMARY KEY,

name VARCHAR(50)

);

-- 插入数据时没有为主键列赋值

INSERT INTO demo (name)

VALUES ('张三');

-- 抛出错误:Cannot insert the value NULL into column 'id',

-- column does not allow nulls. INSERT fails.

修改主键会消耗大量资源

在 MSSQL 中,如果表中已经存在数据,那么修改主键会消耗大量的资源,需要涉及到表的重建、复制等操作。因此,在设计表结构时就需要慎重考虑主键的选择。

如果表中的主键选择不合适,导致需要修改主键,那么可能会导致表的性能下降、数据丢失等问题。

小结

主键是关系型数据库设计的核心概念之一,可以确保数据的唯一性,提高查询性能。在 MSSQL 中,我们可以通过 ALTER TABLE 语句来为表添加主键,但是需要注意主键列不允许为空,并且修改主键会消耗大量资源。

数据库标签