持续创作,加速成长!这是我参与「掘金日新计划 · 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等索引。
创建索引
- 创建表的时候创建索引,语法如下:
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;
注意: 修改主键索引:必须先删除掉原索引,再新建索引。
今天先学习到这里,明天继续。