CREATE INDEX 与 ALTER TABLE ADD INDEX - MySQLism 还是 SQL 标准?

Mik*_*ell 31 mysql index sql-standard

刚刚遇到一个奇怪的问题,根据我创建索引的方式,需要一个索引名称。

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
Run Code Online (Sandbox Code Playgroud)

在我看来, CREATE INDEX 调用不应该要求索引名称。我想知道这是 MySQL 主义还是 SQL 标准?

Erw*_*ter 25

我不认为SQL标准定义了如何创建索引的所有

来自这个维基百科页面的引用:

标准化

没有关于创建索引的标准,因为 ISO SQL 标准不涵盖物理方面。索引是数据库概念的物理部分之一,例如存储(表空间或文件组)。RDBMS 供应商都提供了 CREATE INDEX 语法和一些特定选项,这取决于他们提供给客户的功能。

Postgres 手册似乎在这里支持这一点:

SQL 标准中没有对索引的规定。

在关于 SO 的这个相关问题下有更多证据。

  • MySQL 是我所知道的唯一允许使用“ALTER TABLE”添加*显式*索引的 DBMS(在某些情况下,各种 DBMS 会创建隐式索引以支持约束,但这不是我的意思)。 (6认同)