sql-statement ::= | CREATE [UNIQUE] INDEX [IF NOT EXISTS] [database-name .] index-name ON table-name ( column-name [, column-name]* ) |
column-name ::= | name [ COLLATE collation-name] [ ASC | DESC ] |
CREATE INDEX 命令包括关键字 "CREATE INDEX" 后跟新索引的名字, 关键字“ON”,以及要被索引的表的名字,和一个括号, 括号中是将要作为索引键的表中字段名字的列表。 每一个列名后都可跟一个“ASC”或“DESC”关键字,以表明排序顺序, 但在当前的实现中,该关键字是被忽略的,所有的排序永远是升序。
每一列名后的 COLLATE 子句定义该列文本条目的对照序列。 缺省的对照序列是使用CREATE TABLE语句在该列上定义的。 或者,如果在该列上没有定义对照序列,则使用内建的二进制对照序列。
对于一个表上可以建多少索引没有固定的限制。 一个索引中可以索引多少列也没有限制。
如果 UNIQUE 关键字在 CREATE 和 INDEX 之前出现, 那么在索引条目中就不允许有重复的值。 在表中插入重复值将会出错。
根据被索引的表是否是临时表, 每一个 CREATE INDEX 语句精确的文本定义将存在 sqlite_master 表或 sqlite_temp_master 表中。 每当打开数据库时,所有 CREATE INDEX 语句会从 sqlite_master 表中读出,用于重新生成SQLite索引布局的内部表示。
如果提供选的 IF NOT EXISTS 子句,那么当有同一名字的另一索引存在是, 它将什么也不做。
索引可以使用 DROP INDEX 命令删除。