主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。
MySQL是一种广泛使用的开源关系型数据库管理系统,其支持多种数据约束,其中主键约束是其中最重要的之一。本文将深入讨论MySQL主键约束的定义、优势、限制、创建和管理,以及在实践中的最佳实践。
主键约束的优势
- 数据完整性:主键约束防止了表中出现重复的记录,确保了数据的完整性。无法插入相同主键值的记录,从而避免了数据冗余和不一致。
- 快速数据访问:由于主键的唯一性,数据库引擎可以使用主键来加速数据的查找和连接操作,提高数据访问的性能。
- 外键关联:主键约束通常用于定义外键关系,将不同表之间的记录关联起来,建立数据库的关联性,从而实现更复杂的数据查询和管理。
主键约束的限制
- 唯一性:主键字段的值必须是唯一的,不能有重复值。
- 非空性:主键字段的值不能为NULL,确保每条记录都有一个有效的标识。
- 单一字段或字段组合:主键可以由单一字段或字段组合构成,但无法包含NULL值。
- 自动增长:通常使用自动增长(Auto Increment)来生成主键值,确保每次插入记录时,主键值都是唯一的。
创建主键约束
在MySQL中,可以在创建表时定义主键约束,也可以在已有的表上添加主键约束。
- 创建表时定义主键约束
CREATE TABLE my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
...
);
在上述示例中,id字段被定义为主键,并使用AUTO_INCREMENT属性来自动生成唯一值。
- 修改表时添加主键约束
在修改数据表时添加主键约束的语法格式如下:
ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
比如我们要将student表的id设置为主键,语句如下:
ALTER TABLE student
ADD PRIMARY KEY (id);
以上SQL语句将student表中的id字段定义为主键。
注:在修改表时要设置表中某个字段的主键约束时,要确保设置成主键约束的字段中值不能够有重复的,并且要保证是非空的。
- 创建表时设置联合主键
联合主键,就是这个主键是由一张表中多个字段组成的。
比如,设置学生选课数据表时,使用学生编号做主键还是用课程编号做主键呢?如果用学生编号做主键,那么一个学生就只能选择一门课程。如果用课程编号做主键,那么一门课程只能有一个学生来选。显然,这两种情况都是不符合实际情况的。
实际上设计学生选课表,要限定的是一个学生只能选择同一课程一次。因此,学生编号和课程编号可以放在一起共同作为主键,这也就是联合主键了。
主键由多个字段联合组成,语法格式如下:
PRIMARY KEY [字段1,字段2,…,字段n]
注:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
示例如下:
CREATE TABLE tb_emp5
-> (
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,