MySQL——索引的创建与删除

MySQL——索引的创建与删除

1、创建索引的三种方式

1.1、建表时创建索引

使用CREATE TABLE创建表时,除了可以定义列的数据类型外,还可以定义主键约束、外键约束或者唯一性约束,而不论创建哪种约束,在定义约束的同时相当于在指定列上创建了一个索引。

隐式创建:

在声明有主键约束、唯一性约束、外健约束的字段上,会自动添加相关的索引。

create table dept(
    dept_id int primary key auto_increment, -- 通过定义主键约束创建主键索引
    dept_name varchar(20)
);

create table emp(
    emp_id int primary key auto_increment,
    emp_name varchar(20) unique , -- 唯一性约束
    dept_id int,
    constraint emp_dept_id_fk foreign key(dept_id) references dept(dept_id) -- 外健约束
);

在这里插入图片描述

显式创建:

显式创建基本语法:

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 指定升序或者降序的索引值存储。
-- 创建普通索引
create table book(
    book_id int,
    book_name varchar(50),
    authors varchar(50),
    info varchar(50),
    comment varchar(50),
    year_publication year,
    index idx_bname(book_name) -- 声明索引,字段为book_name
);
-- 创建全文索引,全文索引在MySQL5.5及之前 MyISAM支持,InnoDB不支持
create table book1(
    book_id int,
    book_name varchar(50),
    authors varchar(50),
    info varchar(50),
    comment varchar(50),
    year_publication year,
    fulltext index fk_idx_cmt(comment(20)) -- 声明索引,字段为comment,长度取20,避免索引长度过长
);

1.2、修改表时创建索引

ALTER TABLE 语句创建索引语法:

ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL][INDEX | KEY]
[index_name] (col_name [length] ,...)[ASC | DESC]

使用实例:

-- 创建普通索引
alter table book2 add index idx_cmt(comment);

-- 创建唯一索引
alter table book2 add unique uk_idx_bname(book_name);

-- 创建联合索引
alter table book2 add index mul_bid_bname_info(book_id,book_name,info);

1.3、使用 CREATE INDEX 语句创建索引

create index idx_cmt on book3(comment);-- 创建普通索引

create unique index uk_idx_bname on book3(book_name);-- 创建唯一索引

create index mul_bid_bname_info on book3(book_id,book_name,info);-- 创建联合索引

2、删除索引

使用 ALTER TABLE 删除索引

语法格式:

ALTER TABLE table_name DROP INDEX index_name;

使用实例:

alter table book3 drop index idx_cmt;

alter table book3 drop index mul_bid_bname_info;

注意:添加 auto_increment 自增 约束字段的唯一索引不能被删除。

使用 DROP INDEX 删除索引

语法格式:

DROP INDEX index_name on table_name;

使用实例:

drop index idx_cmt on book2;

drop index mul_bid_bname_info on book2;

注意:删除表中的列时,如果要删除的列为联合索引的组成部分,则该列也会从索引中删除。如果组成联合索引的所有列都被删除,整个索引也被删除。

猜你喜欢

转载自blog.csdn.net/wpc2018/article/details/123105381