SQL Server主键约束

在本教程中,将学习如何使用SQL Server PRIMARY KEY约束为表创建主键。

SQL Server PRIMARY KEY约束简介

主键是唯一标识表中每一行的列或一组列。可以使用PRIMARY KEY约束为表创建主键。
如果主键只包含一列,则可以将PRIMARY KEY约束定义为列约束:

CREATE TABLE table_name (
    pk_column data_type PRIMARY KEY,
    ...
);

如果主键有两列或更多列,则必须使用PRIMARY KEY约束作为表约束:

CREATE TABLE table_name (
    pk_column_1 data_type,
    pk_column_2 data type,
    ...
    PRIMARY KEY (pk_column_1, pk_column_2)
);

每个表只能有一个主键。参与主键的所有列必须定义为NOT NULL。 如果没有为这些列指定NOT NULL约束,SQL Server会自动为所有主键列设置NOT NULL约束。

在创建主键时,SQL Server还会自动创建唯一的聚簇索引(如果指定,则为非聚集索引)。

SQL Server PRIMARY KEY约束示例

以下示例创建一个包含主键的表,该主键包含一列:

CREATE TABLE sales.activities (
    activity_id INT PRIMARY KEY IDENTITY,
    activity_name VARCHAR (255) NOT NULL,
    activity_date DATE NOT NULL
);

在此sales.activities表中,activity_id列是主键列。activity_id列包含唯一值。

IDENTITY属性用于activity_id列以自动生成唯一的整数值。

以下语句创建一个名为sales.participants的新表,其主键由两列组成:

CREATE TABLE sales.participants(
    activity_id int,
    customer_id int,
    PRIMARY KEY(activity_id, customer_id)
);

在此示例中,activity_idcustomer_id列中的值可以重复,但两列中的每个值组合必须是唯一的。

通常,表始终具有在创建时定义的主键。 但是,有时,现有表可能由于某种原因而没有定义主键。 在这种情况下,可以使用ALTER TABLE语句向表中添加主键。请考虑以下示例。

以下语句创建没有主键的表:

CREATE TABLE sales.events(
    event_id INT,
    event_name VARCHAR(255),
    start_date DATE NOT NULL,
    duration DEC(5,2)
);

要将event_id列作为主键,请使用以下ALTER TABLE语句:

ALTER TABLE sales.events 
ADD PRIMARY KEY(event_id);

上一篇: SQL Server约束 下一篇: SQL Server视图