刚刚遇到一个奇怪的问题,根据我创建索引的方式,需要一个索引名称。
http://dev.mysql.com/doc/refman/5.5/en/create-index.html
http://dev.mysql.com/doc/refman/5.5/en/alter-table.html
CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name
ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name
在我看来, CREATE INDEX 调用不应该要求索引名称。我想知道这是 MySQL 主义还是 SQL 标准?
我认为 SQL 标准根本没有定义如何创建索引。
来自此维基百科页面的引用:
Postgres 手册似乎在这里支持这一点:
在这个相关问题下关于 SO 的更多证据。
如果您不提供索引名称,MySQL 会自动为您命名索引。
上面的
ALTER TABLE ADD INDEX
语句将产生以下索引:col1
col1_2
col2
如果您创建只有一列的索引,则可能不需要为索引提供名称(因为索引的名称将与列名称相同)。但是,如果您创建具有多列的索引,最好为索引提供名称,以便更容易识别索引。
为索引提供名称是一种很好的做法(并在其前面加上前缀
idx
或其他东西以将其标识为索引):