什么是主键
在数据库表中,主键是唯一标识表中每一条数据的字段或字段组合。主键可以让我们快速地找到或者编辑一条数据,是现代关系型数据库设计的核心理念之一。
主键的作用
确保数据唯一性
主键的第一个作用就是确保数据的唯一性。例如,我们有一个学生表,其中有两个学生名字都是“张三”,如果我们要找到其中的一位学生,没有主键的话就很困难了,很可能会找到两条数据都是“张三”的。
在这种情况下,我们可以使用一个学生 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 语句来为表添加主键,但是需要注意主键列不允许为空,并且修改主键会消耗大量资源。