Инструкция CREATE INDEX (Microsoft Access SQL)

Область применения: Access 2013, Office 2013

Создает новый индекс в существующей таблице.

Примечание.

Ядро СУБД Microsoft Access не поддерживает использование CREATE INDEX (кроме как для создания псевдоиндекса в связанной таблице ODBC) или любых других инструкций DDL с базами данных, которые не основаны на ядре СУБД Microsoft Access. Используйте вместо этого методы DAO Create. Дополнительные сведения см. в разделе "Примечания".

Синтаксис

CREATE [ UNIQUE ] INDEX index ON table (поле [ASC|DESC][, поле [ASC|DESC], ...]) [WITH { PRIMARY | ЗАПРЕТИТЬ ЗНАЧЕНИЕ NULL | ИГНОРИРОВАТЬ NULL }]

Инструкция CREATE INDEX включает в себя следующие элементы:

Часть

Описание

индекс

Имя создаваемого индекса.

таблица

Имя существующей таблицы, в которой будет создан индекс.

поле

Имя одного или нескольких полей для индексации. Чтобы создать индекс по одному полю, укажите имя поля в круглых скобках после имени таблицы. Чтобы создать индекс по нескольким полям, укажите имена всех полей, включаемых в индекс. Чтобы создать индексы с упорядочением по убыванию, используйте зарезервированное слово DESC; в противном случае будут созданы индексы с упорядочением по возрастанию.

Примечания

Чтобы запретить появление повторяющихся значений в одном или нескольких индексированных полях, используйте зарезервированное слово UNIQUE.

Чтобы определить правила проверки данных, можно использовать необязательное предложение WITH. Вы можете выполнить указанные ниже действия.

  • Запретить значения NULL в индексированных полях новых записей с помощью параметра DISALLOW NULL.

  • Предотвратить индексирование записей со значениями NULL в одном или нескольких индексированных полях с помощью параметра IGNORE NULL.

  • Определить одно или несколько индексированных полей в качестве первичного ключа с помощью зарезервированного слова PRIMARY. Поскольку подразумевается, что первичный ключ уникален, зарезервированное слово UNIQUE можно опустить.

Инструкция CREATE INDEX может быть использована для создания псевдоиндекса в связанной таблице источника данных ODBC, такого как Microsoft SQL Server, если в ней еще нет индекса. Для создания псевдоиндекса не требуется разрешения или доступа к удаленному серверу, а на удаленном сервере никак не отразится наличие псевдоиндекса. Для связанных и исходных таблиц используется один и тот же синтаксис. Особенно полезным может быть создание псевдоиндекса в таблице, которая будет использоваться преимущественно для чтения.

Чтобы добавить индекс по одному полю или по набору полей в таблице, можно также воспользоваться инструкцией ALTER TABLE. Чтобы удалить индекс, созданный с помощью инструкции ALTER TABLE или CREATE INDEX, можно воспользоваться инструкцией ALTER TABLE или DROP.

Примечание.

Если в таблице уже есть первичный ключ, не используйте зарезервированное слово PRIMARY при создании в ней нового индекса: это приведет к ошибке.

Пример

В этом примере создается индекс, состоящий из полей Home Phone (Домашний телефон) и Extension (Расширение) в таблице Employees (Сотрудники).

    Sub CreateIndexX1() 
     
        Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create the NewIndex index on the Employees table. 
        dbs.Execute "CREATE INDEX NewIndex ON Employees " _ 
            & "(HomePhone, Extension);" 
     
        dbs.Close 
     
    End Sub 

В этом примере создается индекс в таблице Customers (Клиенты) с помощью поля CustomerID (КодКлиента). Никакие две записи не могут содержать одинаковые данные в поле CustomerID (КодКлиента), и не допускаются значения NULL.

    Sub CreateIndexX2() 
     
        Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create a unique index, CustID, on the  
        ' CustomerID field. 
        dbs.Execute "CREATE UNIQUE INDEX CustID " _ 
            & "ON Customers (CustomerID) " _ 
            & "WITH DISALLOW NULL;" 
     
        dbs.Close 
     
    End Sub