MySQL CREATE INDEX语句创建索引(非常详细,附带实例)
CREATE INDEX 语句可以在已经存在的表上添加索引。在 MySQL 中,CREATE INDEX 被映射到一个 ALTER TABLE 语句上,基本语法结构为:
在这里,使用相同的表 book,假设该表中没有任何索引值,创建 book 表语句如下:
【实例】在 book 表中的 bookname 字段上建立名为 BkNameIdx 的普通索引,SQL 语句如下:
【实例】在 book 表的 bookId 字段上建立名称为 UniqidIdx 的唯一索引,SQL 语句如下:
【实例】在 book 表的 comment 字段上建立单列索引,SQL 语句如下:
【实例】在 book 表的 authors 和 info 字段上建立组合索引,SQL 语句如下:
【实例】先删除表 t6,再重新建立表 t6,在 t6 表中使用 CREATE INDEX 语句,在 CHAR 类型的 info 字段上创建全文索引。
首先删除表 t6,并重新建立该表,可以输入下面的语句:
【实例】删除表 t7,重新创建表 t7,在 t7 表中使用 CREATE INDEX 语句,在空间数据类型字段 g 上创建名称为 spatIdx 的空间索引,操作如下:
首先删除表 t7,并重新建立该表,分别输入下面的语句:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col_name[length],…) [ASC | DESC]CREATE INDEX 语句和 ALTER INDEX 语句的语法基本一样,只是关键字不同。
在这里,使用相同的表 book,假设该表中没有任何索引值,创建 book 表语句如下:
CREATE TABLE book ( bookid INT NOT NULL, bookname VARCHAR(255) NOT NULL, authors VARCHAR(255) NOT NULL, info VARCHAR(255) NULL, comment VARCHAR(255) NULL, year_publication YEAR NOT NULL );读者可以将该数据库中的 book 表删除,按上面的语句重新建立,然后进行下面的操作。
【实例】在 book 表中的 bookname 字段上建立名为 BkNameIdx 的普通索引,SQL 语句如下:
CREATE INDEX BkNameIdx ON book(bookname);语句执行完毕之后,将在 book 表中创建名称为 BkNameIdx 的普通索引。读者可以使用 SHOW INDEX或者SHOW CREATE TABLE 语句查看 book 表中的索引,其索引内容与前面介绍的相同。
【实例】在 book 表的 bookId 字段上建立名称为 UniqidIdx 的唯一索引,SQL 语句如下:
CREATE UNIQUE INDEX UniqidIdx ON book ( bookId );语句执行完毕之后,将在 book 表中创建名称为 UniqidIdx 的唯一索引。
【实例】在 book 表的 comment 字段上建立单列索引,SQL 语句如下:
CREATE INDEX BkcmtIdx ON book(comment(50) );语句执行完毕之后,将在 book 表的 comment 字段上建立一个名为 BkcmtIdx 的单列索引,长度为 50。
【实例】在 book 表的 authors 和 info 字段上建立组合索引,SQL 语句如下:
CREATE INDEX BkAuAndInfoIdx ON book ( authors(20),info(50) );语句执行完毕之后,在 book 表的 authors 和 info 字段上建立了一个名为 BkAuAndInfoIdx 的组合索引,authors 的索引序号为 1、长度为 20,info 的索引序号为 2、长度为 50。
【实例】先删除表 t6,再重新建立表 t6,在 t6 表中使用 CREATE INDEX 语句,在 CHAR 类型的 info 字段上创建全文索引。
首先删除表 t6,并重新建立该表,可以输入下面的语句:
mysql> drop table t6; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE t6 -> ( -> id INT NOT NULL, -> info CHAR(255) -> ) ENGINE=MyISAM; Query OK, 0 rows affected (0.00 sec)使用 CREATE INDEX 在 t6 表的 info 字段上创建名称为 infoFTIdx 的全文索引:
CREATE FULLTEXT INDEX infoFTIdx ON t6(info);语句执行完毕之后,将在 t6 表中创建名称为 infoFTIdx 的索引,该索引在 info 字段上创建,类型为 FULLTEXT,允许空值。
【实例】删除表 t7,重新创建表 t7,在 t7 表中使用 CREATE INDEX 语句,在空间数据类型字段 g 上创建名称为 spatIdx 的空间索引,操作如下:
首先删除表 t7,并重新建立该表,分别输入下面的语句:
mysql> drop table t7; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE t7 (g GEOMETRY NOT NULL) ENGINE=MyISAM; Query OK, 0 rows affected (0.00 sec)使用 CREATE INDEX 语句在表 t7 的 g 字段建立空间索引:
CREATE SPATIAL INDEX spatIdx ON t7 (g);语句执行完毕之后,将在 t7 表中创建名称为 spatIdx 的空间索引,该索引在 g 字段上创建。