我已经对'INDEX'是否是ANSI SQL中的关键字进行了一些研究,但我没有运气,尤其是2008和2011标准。
任何人都知道这是否是一个有效的ANSI ISO SQL关键字?
答案 0 :(得分:7)
用于创建,更改或管理索引的SQL语言没有ANSI标准。所以不,INDEX不是ANSI标准的关键字(保留字)。
凯文克莱恩在他的书SQL in a Nutshell中专门支持我。他指出这是创建索引的语法在供应商之间差异很大的原因之一。
作为进一步的间接证据,您还会注意到各种供应商在其SQL文档中提到有关INDEX的语句是ANSI标准的扩展。例如,请参阅IBM doc here for ALTER INDEX。
这也是ANSI SQL保留字的handy list - 但最多只能到2003年。
作为旁注:我曾经见过ANSI关于索引的唯一一次是在讨论独特索引(通常只是一个唯一约束)如何处理空值时。根据ANSI,null不等于null;因此,唯一索引应允许多个空值,因为每个ANSI它们彼此不相等。有些引擎遵循这条规则 - 其他引擎则没有。在这种情况下,ANSI标准仅指两个空值是相等还是唯一...标准与索引无关。可能有其他ANSI标准对INDEX有类似的影响,但没有关于它们周围的DDL。
答案 1 :(得分:2)
SQL标准中故意省略了索引,因为并非所有可以使用SQL定位的数据源都支持“index”的任何概念。例如,在MS Access SQL中,可以使用CREATE TABLE
语法创建一个新的MS Excel工作簿,其中包含SQL认为是“表”但Excel认为是“命名范围”并创建Access表索引在Excel范围内毫无意义。