MySQL学习-索引创建(一)

55 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

前言

上篇我们学习了MySQL中的Hash结构。有兴趣的小伙伴可以阅读(MySQL学习-Hash结构)。
下面我们继续学习MySQL中的索引创建。

索引的分类

MySQL的索引包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等。

  • 从功能逻辑上说,索引分4种,分别是普通索引,唯一性索引,主键索引,全文索引。
  • 按照物理实现方式,索引分2种,聚簇索引和非聚簇索引。
  • 按照作用字段个数进行划分,分为单列索引和联合索引。

不同的存储引擎支持的索引类型不一样:

  • InnoDB:支持B-tree,Full-text等索引,不支持Hash索引。
  • MyISAM:支持B-tree,Full-text等索引,不支持Hash索引。
  • Memory:支持B-tree,Hash等索引,不支持Full-text索引。
  • NDB:支持Hash索引,不支持B-tree,Full-text等索引。
  • Archive:不支持B-tree,Full-text,Hash等索引。

创建索引

  1. 创建表的时候创建索引,语法如下:
CREATE TABLE table_name [col_name data_type]
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length]) [ASC | DESC]

UNIQUE,FULLTEXT和SPATIAL为可选参数,分别表示唯一索引,全文索引和空间索引。
INDEX与KEY为同义词,两者的作用相同,用来指定创建索引。
index_name指定索引的名称,为可选参数,如果不指定,那么MySQL默认col_name为索引名。
col_name为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择。
length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度。
ASC或DESC指定升序或者降序的索引值存储。

创建普通索引

在book表中的year字段上建立普通索引。

CREATE TABLE book(
    book_id INT,
    book_name VARCHAR(100),
    info VARCHAR(100),
    year YEAR,
    INDEX(year)
);

创建唯一索引

CREATE TABLE test1(
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    UNIQUE INDEX uk_id(id)
);

创建主键索引

设定为主键后数据库会自动建立索引,InnoDB为聚簇索引。

CREATE TABLE student(
    id INT(10) UNSIGNED AUTO_INCREMENT,
    student_no VARCHAR(200),
    PRIMARY KEY(id)
);

删除主键索引

ALTER TABLE student
DROP PRIMARY KEY;

注意: 修改主键索引:必须先删除掉原索引,再新建索引。

今天先学习到这里,明天继续。