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;
注意:删除表中的列时,如果要删除的列为联合索引的组成部分,则该列也会从索引中删除。如果组成联合索引的所有列都被删除,整个索引也被删除。