MySQL 中主键是否自动建立索引?

MySQL 中主键是否自动建立索引?

1. 什么是主键

主键是一张表中的一列或一组列,它的值能够唯一地标识表中的每一行数据,通常情况下,主键的取值都是可以唯一标识数据的自然数或者递增的数值。

2. MySQL 中的主键

在 MySQL 数据库中,为了提高查询数据的效率,通常需要对一个表中的某些列进行索引。主键就是一种特殊的索引,当我们指定某个列作为主键时,MySQL 框架会自动为该列创建一个名为 PRIMARY 的索引。

具体来说,首先需要创建一个表,然后为表中某个列定义主键。在 MySQL 数据库中,可以使用 AUTO_INCREMENT 选项为某个列赋予递增的数值,使得数据每次插入时都可以自动得到一个新的唯一标识。

CREATE TABLE students (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(20),

age INT,

sex CHAR(1),

registration_date DATE

);

在上面的代码中,我们定义了一个名为 students 的表,其中 id 列是主键,它的值会自动递增。当然,我们也可以手动为主键赋值,只需要保证每个值都是唯一的即可。

3. 主键自动建立索引

如前所述,当我们定义了主键后,MySQL 框架会自动为该列创建一个 PRIMARY 索引,以加速对该列的查询操作。也就是说,在定义主键时,MySQL 会自动将其进行索引。

下面的 SQL 查询可以查看 students 表中的索引信息:

SHOW INDEX FROM students;

执行结果如下:

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

| students | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | | |

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

从上述结果可以看出,students 表中有唯一的主键 PRIMARY,其中 Seq_in_index 为 1,表示当前列为索引的第一列。我们也可以使用 EXPLAIN SELECT 语句来查看 MySQL 在执行查询时会如何使用索引。例如,如下代码可以查询出数据表中 name 字段为“张三”的所有行:

EXPLAIN SELECT * FROM students WHERE name='张三';

执行结果如下:

+----+-------------+----------+------------+-------+---------------+---------+---------+------+------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+----------+------------+-------+---------------+---------+---------+------+------+----------+-------------+

| 1 | SIMPLE | students | NULL | const | PRIMARY | PRIMARY | 4 | NULL | 1 | 100.00 | Using index |

+----+-------------+----------+------------+-------+---------------+---------+---------+------+------+----------+-------------+

从上述执行结果中,我们可以看到 key 行的值为 PRIMARY,表示 MySQL 正确地使用了 students 表的主键索引来查询数据。

综上所述,MySQL 在定义主键时会自动为其创建索引。而这种自动建立索引的方式,也是为了提高表中数据的查询效率,以更好地满足用户对于数据的查询、统计等需求。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签