自动创建:
当在CREATE TABLE或者ALTER TABLE语句中定义了一个主键或者唯一键约束时,MySQL自动为它们创建一个唯一索引。主键索引的名字叫primary。唯一键索引的名字一般就是唯一键的第一个列的名字(有单列索引和复合索引)。
手工创建:使用CREATE INDEX或者ALTER TABLE语句
alter table语句创建和删除索引的语法为:
ALTER TABLE tbl_name ADD {INDEX|KEY} [index_name]
[index_type] (index_col_name,…) [index_option] …
其中 index_type :USING {BTREE | HASH}
ALTER TABLE tbl_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
create/drop index的语法为:
CREATE [UNIQUE] INDEX index_name [index_type]
ON tbl_name (index_col_name,…)
DROP INDEX index_name ON tbl_name
例:在players表的postcode列上建一个索引
create index player_pc on players(postcode); 索引可以同时建在多个列上
例:在matches表的won和lost列上建一个复合索引。
create index mat_wl on matches(won, lost);
例:在players表的name和initials列上建一个唯一索引。
create unique index nameinit ON players(NAME, initials);
## 该语句执行后,就不能向表中插入列值组合完全相同的两行
使用alter table语句添加索引;在teams表的division列上创建一个非唯一索引。
alter table teams add index teams_division_idx USING BTREE(division);
在CREATE TABLE语句中创建索引
例:创建matches表,在won和lost列上键一个复合索引
create table matches_copy(
matchno INTEGER PRIMARY KEY, teamno INTEGER NOT NULL,
playerno INTEGER NOT NULL, won SMALLINT NOT NULL ,
lost SMALLINT NOT NULL, INDEX mat_wl_idx (won,lost) );
删除索引:
DROP INDEX mat_wl_idx ON matches_copy;
ALTER TABLE matches_copy DROP INDEX mat_wl_idx;