在 MySQL 中,主键约束(PRIMARY KEY constraint)是一种特殊类型的约束,用于唯一标识表中的每一行记录。主键确保每一行都有唯一的标识符,并且不允许 `NULL` 值。以下是主键约束的详细说明、特性和用法示例。
一、主键约束的特性
1. 唯一性
主键中的每个值必须是唯一的,不能重复。这确保了每一行都有一个唯一的标识符。
2. 非空性
主键列不能包含 `NULL` 值。这意味着每个记录都必须有一个有效的标识符。
3. 单个主键
每个表只能有一个主键。主键可以是一个列也可以是多个列(复合主键)。
4. 索引
创建主键时,MySQL 会自动为主键列创建一个唯一索引,便于快速查找和访问数据。
二、如何定义主键
1. 在创建表时定义主键
在创建表时,可以直接在列定义中指定主键:
示例:创建部门表并为其添加主键:
create table tb_department
(
department_id int primary key not null, -- 定义主键
manager_id int not null,
created_at timestamp not null,
updated_at timestamp not null
) default charset = utf8;
也可以将主键放在表的最后部分:
create table tb_department
(
department_id int not null,
manager_id int not null,
created_at timestamp not null,
updated_at timestamp null,
primary key (department_id) -- 定义主键
) default charset = utf8;
2. 在已有表中添加主键
如果表已经存在,可以使用 `ALTER TABLE` 语句来添加主键:
示例:为tb_employees表添加主键
alter table tb_employees
add primary key (employee_id);

3. 复合主键
如果需要通过多个列来唯一标识记录,可以定义复合主键:
示例:
create table project_assignments
(
employee_id int not null,
project_id int not null,
role varchar(50),
primary key (employee_id, project_id) -- 复合主键
) default charset = utf8;
三、主键的优点
数据完整性:通过强制唯一性和非空性规则,确保数据的完整性和可靠性。
提高查询效率:主键自动创建的索引加速了对数据的查询。
便于数据关联:主键常用于与其他表建立外键关系,帮助维护数据之间的联系。
四、主键相关的操作
1. 删除主键
要删除主键,可以使用 `ALTER TABLE` 语句:
示例:
alter table tb_employees drop primary key;
2. 修改主键
修改主键需要先删除先前的主键,然后再添加新的主键:
ALTER TABLE tb_employees
DROP PRIMARY KEY,
ADD PRIMARY KEY (new_column);
五、总结
主键约束在关系数据库中是非常重要的,它用于唯一标识表中的每一行记录,并确保数据的完整性和可靠性。在设计数据库时,合理规划主键的使用可以提高数据库的性能和可维护性。