MySQL 主键全面解析:定义、创建、删除与查询

来源:这里教程网 时间:2026-03-01 18:31:09 作者:

在 MySQL 数据库中,主键是非常重要的概念,它对于数据的唯一性保证、数据检索效率提升等方面都起着关键作用。本文将详细解析 MySQL 主键,涵盖主键是什么、如何创建、如何删除以及如何查询等内容。

一、主键是什么

主键(Primary Key)是数据库表中的一个或多个字段(或列),其值能够唯一标识表中的每一行记录。也就是说,在表中任意两条记录的主键值都不相同,并且主键值不能为 NULL。主键的主要作用包括:
  • 保证数据唯一性:确保表中没有重复的记录。
  • 加速数据检索:数据库可以利用主键建立高效的索引,从而加快查询、更新和删除等操作的速度。
  • 建立表之间的关系:在关系型数据库中,主键常用于与其他表的外键建立关联,形成表之间的关系。

    二、如何创建主键

    在 MySQL 中,创建主键有两种常见场景:一种是在创建表时定义主键,另一种是在已有表上添加主键。

    (一)创建表时定义主键

    在创建表的 SQL 语句中,可以直接指定主键。具体有以下两种方式:
    1. 列级约束定义:在定义字段时直接声明主键。
    CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(50),age INT);
    在上述语句中,student_id字段被定义为主键,类型为 INT。
    1. 表级约束定义:在所有字段定义完成后,统一指定主键。
    CREATE TABLE students (student_id INT,name VARCHAR(50),age INT,PRIMARY KEY (student_id));
    这种方式适用于单个字段或多个字段组成的联合主键。例如,若有一个表需要两个字段共同作为主键:
    CREATE TABLE exam_scores (student_id INT,exam_id INT,score INT,PRIMARY KEY (student_id, exam_id));

    (二)在已有表上添加主键

    如果表已经创建完成,之后需要添加主键,可以使用 ALTER TABLE 语句。
    1. 添加单个字段为主键
    ALTER TABLE students ADD PRIMARY KEY (student_id);
    需要注意的是,要添加为主键的字段必须不存在 NULL 值,且所有值都是唯一的,否则添加主键会失败。
    1. 添加联合主键
    ALTER TABLE exam_scores ADD PRIMARY KEY (student_id, exam_id);

    三、如何删除主键

    删除主键时,需要使用 ALTER TABLE 语句。需要注意的是,主键一旦被删除,表中就不再有主键约束,但表中的数据仍然存在,只是失去了主键所带来的唯一性和非 NULL 约束。
    ALTER TABLE students DROP PRIMARY KEY;
    这里需要注意,如果主键是自增主键(通常用于单个字段的主键),在删除主键后,自增属性也会被移除。另外,如果表中存在外键关联到该主键,需要先删除外键约束,才能删除主键,否则会报错。

    四、如何查询主键

    在 MySQL 中,可以通过查询系统表来获取表的主键信息。具体来说,可以查询INFORMATION_SCHEMA数据库中的COLUMNS表和KEY_COLUMN_USAGE表。

    (一)查询表的主键字段

    SELECT COLUMN_NAMEFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名' AND COLUMN_KEY = 'PRI';
    将上述语句中的 ' 数据库名 ' 和' 表名 ' 替换为实际的数据库名称和表名称即可。例如,查询数据库test中表students的主键字段:
    SELECT COLUMN_NAMEFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'students' AND COLUMN_KEY = 'PRI';

    (二)查询表的主键信息(包括联合主键)

    SELECT COLUMN_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名' AND CONSTRAINT_NAME = 'share.sjbt.org';
    同样,替换相应的数据库名和表名。对于联合主键,这条语句会返回所有组成主键的字段名。

    总结

    主键是 MySQL 数据库中确保数据完整性和提升性能的重要机制。在创建表时,应根据业务需求合理选择主键,可以是单个字段,也可以是联合主键。在操作主键时,无论是创建还是删除,都要注意数据的一致性和约束条件。通过查询系统表,能够方便地获取表的主键信息,这对于数据库的管理和维护非常重要。合理使用主键,能够让我们更好地管理和操作数据库中的数据。

  • 相关推荐