我对 'INDEX' 是否是 ANSI SQL 中的关键字进行了一些研究,但我没有任何运气,特别是对于 2008 和 2011 标准。
有人确定这是否是有效的 ANSI ISO SQL 关键字吗?
没有用于创建、更改或管理索引的 SQL 语言的 ANSI 标准。所以不,INDEX 不是 ANSI 标准的关键字(保留字)。
Kevin Kline 在他的书SQL in a Nutshell中特别支持我。他指出这是创建索引的语法因供应商而异的原因之一。
作为进一步的间接证据,您还会注意到各种供应商在其 SQL 文档中提到有关 INDEX 的语句是对 ANSI 标准的扩展。例如,请参阅此处的 IBM 文档以获取 ALTER INDEX。
这也是一个方便的 ANSI SQL 保留字列表 - 但仅限于 2003 年。
作为旁注:我见过的关于索引的唯一一次提到的ANSI是在谈论唯一索引(通常只是一个唯一约束)如何处理空值时。根据 ANSI,null 不等于 null;因此,唯一索引应允许多个空值,因为根据 ANSI,它们彼此不相等。一些引擎遵循这个规则-其他的则没有。这种情况下的 ANSI 标准仅指两个空值是否相等或唯一……该标准与索引无关。可能还有其他 ANSI 标准对 INDEX 有类似的影响,但与围绕它们的 DDL 无关。
SQL 标准特意省略了索引,因为并非所有可以使用 SQL 定位的数据源都支持任何“索引”概念。例如,在 MS Access SQL 中,可以使用CREATE TABLE
语法创建一个新的 MS Excel 工作簿,其中包含 SQL 认为是“表”但 Excel 认为是“命名范围”的内容,并在 Excel 范围上创建 Access 表索引使得没有意义。