软件测试 MySQL主键约束详解:保障数据完整性与性能优化

46 阅读3分钟

主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。

MySQL是一种广泛使用的开源关系型数据库管理系统,其支持多种数据约束,其中主键约束是其中最重要的之一。本文将深入讨论MySQL主键约束的定义、优势、限制、创建和管理,以及在实践中的最佳实践。

主键约束的优势

  • 数据完整性:主键约束防止了表中出现重复的记录,确保了数据的完整性。无法插入相同主键值的记录,从而避免了数据冗余和不一致。
  • 快速数据访问:由于主键的唯一性,数据库引擎可以使用主键来加速数据的查找和连接操作,提高数据访问的性能。
  • 外键关联:主键约束通常用于定义外键关系,将不同表之间的记录关联起来,建立数据库的关联性,从而实现更复杂的数据查询和管理。

主键约束的限制

  • 唯一性:主键字段的值必须是唯一的,不能有重复值。
  • 非空性:主键字段的值不能为NULL,确保每条记录都有一个有效的标识。
  • 单一字段或字段组合:主键可以由单一字段或字段组合构成,但无法包含NULL值。
  • 自动增长:通常使用自动增长(Auto Increment)来生成主键值,确保每次插入记录时,主键值都是唯一的。

创建主键约束

在MySQL中,可以在创建表时定义主键约束,也可以在已有的表上添加主键约束。

  1. 创建表时定义主键约束
CREATE TABLE my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    ...
);

在上述示例中,id字段被定义为主键,并使用AUTO_INCREMENT属性来自动生成唯一值。

  1. 修改表时添加主键约束

在修改数据表时添加主键约束的语法格式如下:

ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);

比如我们要将student表的id设置为主键,语句如下:

ALTER TABLE student
ADD PRIMARY KEY (id);

以上SQL语句将student表中的id字段定义为主键。

注:在修改表时要设置表中某个字段的主键约束时,要确保设置成主键约束的字段中值不能够有重复的,并且要保证是非空的。

  1. 创建表时设置联合主键

联合主键,就是这个主键是由一张表中多个字段组成的。

比如,设置学生选课数据表时,使用学生编号做主键还是用课程编号做主键呢?如果用学生编号做主键,那么一个学生就只能选择一门课程。如果用课程编号做主键,那么一门课程只能有一个学生来选。显然,这两种情况都是不符合实际情况的。

实际上设计学生选课表,要限定的是一个学生只能选择同一课程一次。因此,学生编号和课程编号可以放在一起共同作为主键,这也就是联合主键了。

主键由多个字段联合组成,语法格式如下:

PRIMARY KEY [字段1,字段2,…,字段n]

注:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。

示例如下:

CREATE TABLE tb_emp5
    -> (
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,