数据库约束是确保数据完整性和一致性的重要机制,通过限制表中数据的输入和操作规则,避免无效或错误数据进入数据库,常见的约束类型包括主键约束、外键约束、唯一约束、检查约束和非空约束等,主键约束和外键约束是关系型数据库中最核心的两种约束,它们分别从表内唯一性和表间关联性两个维度保障数据质量,下面将详细介绍这两种约束的创建方法和应用场景。

主键约束的定义与创建
主键约束用于唯一标识表中的每一行数据,确保表中不存在重复记录,且每条记录都能通过主键被唯一检索,主键列的值必须唯一且不能为空,一个表只能有一个主键约束,但可以由多个列组合而成(复合主键)。
在创建表时定义主键,可通过以下SQL语法实现:
CREATE TABLE 表名 (
列名1 数据类型 PRIMARY KEY,
列名2 数据类型
);
创建一个用户表,其中user_id作为主键:
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50)
);
若需为已存在的表添加主键约束,可使用:

ALTER TABLE 表名 ADD PRIMARY KEY (列名);
外键约束的定义与创建
外键约束用于建立两个表之间的关联关系,确保子表(从表)中的外键值必须在父表(主表)的主键值中存在,或为NULL(允许空值),外键约束能有效维护参照完整性,避免“孤立数据”的出现。
创建表时定义外键的语法如下:
CREATE TABLE 子表名 (
列名1 数据类型,
列名2 数据类型,
FOREIGN KEY (列名2) REFERENCES 父表名(父表主键列)
);
创建一个订单表,其中user_id作为外键关联用户表的主键:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
为已存在的表添加外键约束时,使用:

ALTER TABLE 子表名 ADD FOREIGN KEY (列名) REFERENCES 父表名(列名);
约束的注意事项与应用场景
- 主键约束的选择:主键应选择具有业务意义且稳定的列,如身份证号、订单号等,避免使用可能变动的列(如用户名)。
- 外键约束的级联操作:可通过
ON DELETE和ON UPDATE定义级联行为,例如ON DELETE CASCADE表示删除父表记录时自动删除子表相关记录。 - 性能影响:过多的外键约束可能降低数据库写入性能,需在高并发场景下权衡。
通过合理使用主键和外键约束,可以显著提升数据库的可靠性和数据一致性,是数据库设计中不可或缺的一环。
FAQs
Q1: 主键约束和外键约束的区别是什么?
A1: 主键约束用于唯一标识表内的单行数据,确保值唯一且非空;外键约束则用于建立表与表之间的关联,确保子表数据引用父表已存在的有效数据,主键是表内约束,外键是表间约束。
Q2: 是否可以为多个列同时设置主键约束?
A2: 可以,这称为复合主键。CREATE TABLE 表名 (列名1 INT, 列名2 INT, PRIMARY KEY (列名1, 列名2));,此时两列的组合值必须唯一,但单列值可重复。