SQL Server 约束

本文详细介绍了SQL Server中的主键约束和外键约束。主键约束用于唯一标识表中的行,每个表只能有一个主键,可以是单列或多列,创建时会自动设置NOT NULL和索引。外键约束则确保一个表中的列值对应另一个表中的唯一主键,用于维护数据的参照完整性和一致性。示例展示了如何创建和修改主键以及添加外键约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

撰写时间:2022 年 5 月 18日

                       SQL Server 约束

一、SQL Server主键约束:

主键是唯一标识表中每一行的列或一组列。可以使用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还会自动创建唯一的聚簇索引(如果指定,则为非聚集索引)。

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_id 或 customer_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外键约束:

外键是一个表中的一列或一组列,它唯一地标识另一个表的行。vendor_groups 和v endor 表,它们的结构如下:
CREATE TABLE procurement.vendor_groups (
group_id INT IDENTITY PRIMARY KEY,
group_name VARCHAR (100) NOT NULL
);

CREATE TABLE procurement.vendors (
vendor_id INT IDENTITY PRIMARY KEY,
vendor_name VARCHAR(100) NOT NULL,
group_id INT NOT NULL,
);

每个供应商属于供应商组,每个供应商组可能有零个或多个供应商。 vendor_groups 和 vendors 表之间的关系是一对多的。对于 vendors 表中的每一行,始终可以在 vendor_groups 表中找到相应的行。但是,如果使用当前表创建方式,可以在 vendors 表中插入一行而不在vendor_groups 表中显示相应的行。还可以删除 vendor_groups 表中的行,而无需更新或删除 vendors 表中导致 vendors 表中存在孤立的行。要强制执行 vendor_groups 和 vendors 表中的数据之间的链接,需要在 vendors 表中建立外键。要创建外键,请使用 FOREIGN KEY 约束。

以下语句删除 vendors 表并使用 FOREIGN KEY 约束重新创建它:
DROP TABLE vendors;

CREATE TABLE procurement.vendors (
vendor_id INT IDENTITY PRIMARY KEY,
vendor_name VARCHAR(100) NOT NULL,
group_id INT NOT NULL,
CONSTRAINT fk_group FOREIGN KEY (group_id)
REFERENCES procurement.vendor_groups(group_id)
);
现在, vendor_groups 表称为父表,该表是外键约束引用的表。 vendors 表称为子表,该表是应用外键约束的表。在上面的语句中,以下子句创建名为 fk_grou p的 FOREIGN KEY 约束,该约束将 vendors 表中的group_id 链接到 vendor_groups 表中的 group_id :

CONSTRAINT fk_group FOREIGN KEY (group_id) REFERENCES
procurement.vendor_groups(group_id)
SQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值