Программирование >>  Программный интерфейс приложений 

1 ... 57 58 59 [ 60 ] 61 62 63 ... 264


Из этой таблицы видно, что таблицы, созданные в формате ISAM, не могут иметь пустых значений в индексируемом столбце. Кроме того, недопустимо индексирование столбцов типа BLOB и TEXT. Формат MyiSAM снимает эти ограничения. Одним из проявлений этих различий для этих двух типов столбцов является то, что в зависимости от версии СУБД MySQL индекс создать будет просто невозможно. Например, в СУБД MySQL до версии 3.23 работает только метод ISAM. Это не позволяет индексировать столбцы, содержащие пустые значения.

В версии 3.23 возможен экспорт старых таблиц из формата ISAM в формат MylSAM. Такую возможность предоставляет оператор ALTER TABLE. Это позволит воспользоваться новыми возможностями индексирования.

ALTER TABLE tbl name TYPE = MYISAM

Создание индексов

Индексы можно создавать в процессе создания таблицы оператором

CREATE TABLE. С ПОМОЩЬЮ операторов CREATE INDEX И ALTER TABLE

МОЖНО создавать индексы для уже существующих таблиц. Оператор CREATE INDEX был Добавлен в версии 3.22, в более ранних версиях для этой цели можно воспользоваться оператором ALTER TABLE.

Одной из важнейщих характеристик ивдекса является возможность содержать повторяющиеся значения. Если нет, ивдекс создается как PRIMARY KEY ИЛИ UNIQUE. Для ивдекса, содержащего один столбец, это гарантирует отсутствие повторений значений данного столбца во всей таблице. Для ивдекса, содержащего несколько столбцов, это гарантирует отсутствие повторения комбинаций значений данных столбцов во всей таблице.

ИвдексЫ PRIMARY KEY И UNIQUE ПОДобны. ИвдекС PRIMARY KEY ЯВ-

ляется ивдексом UNIQUE с именем PRIMARY. Это означает, что таблица может иметь только один ивдекс PRIMARY KEY, потому что двух индексов одной таблицы с одинаковым именем быть не может. Можно создать несколько ивдексов UNIQUE.

Создать ивдекс для существующей таблицы можно с помощью операторов ALTER TABLE ИЛИ CREATE INDEX. При ЭТОМ следует учесть, что возможности оператора ALTER TABLE щире. В СУБД MySQL с его помощью можно создать обычный индекс, ивдекс UNIQUE или ивдекс

PRIMARY KEY.

ALTER TABLE tbl name ADD INDEX index name (column list) ALTER TABLE tbl name ADD UNIQUE xndex name (column list) ALTER TABLE tbl name ADD PRIMARY KEY (column list)

Здесь tbl name - имя ивдексируемой таблицы, column list - список ивдексируемых столбцов. Если индекс состоит из нескольких столбцов, они разделяются в списке запятыми. Имя ивдекса index name можно не указывать. В случае его отсутствия СУБД MySQL присвоит ин-



дексу имя первого индексируемого столбца. Оператор alter table позволяет создавать сразу несколько индексов одним оператором.

В СУБД MySQL с помощью оператора create index можно создать только обычный индекс и индекс unique.

CREATE UNIQUE INDEX index name ON tbl name (column list) CREATE INDEX index name ON tbl name{column list)

Здесь tbl name, index name и column list имеют значение, аналогичное значению, принятому для оператора alter table. Но в этом операторе необходимо указывать имя индекса. С помощью оператора create index Индекс primary key создать нельзя.

При создании индекса в момент создания таблицы используется синтаксис, аналогичный синтаксису оператора alter table, но предложения, отвечающие за создание индекса, указываются в том месте, где объявляются столбцы таблицы:

CREATE TABLE tbl name {

INDEX index name (column list), UNIQUE index name (column list) PRIMARY KEY (column list)

Как и для оператора ALTER TABLE имя индекса здесь можно не указывать. СУБД MySQL в таком случае присвоит имя сама.

Есть одно исключение, позволяющее задавать индекс прямо при объявлении столбца, - это можно делать только для индекса primary key, содержащего один столбец:

CREATE TABLE my tbl (

i INT NOT NULL PRIMARY KEY

Этот оператор эквивалентен следующему:

CREATE TABLE my tbl (

i INT NOT NULL PRIMARY KEY (i)

Bee примеры создания таблиц предусматривают указание NOT NULL для индексируемых столбцов. Этого правила необходимо придерживаться для таблиц, созданных методом ISAM, где индексируемые столбцы не могут содержать пустых значений. Для таблиц, созданных методом MylSAM, индексируемые столбцы могут иметь пустые значения. Но это справедливо только тогда, когда индекс не является индексом PRIMARY KEY.

Возможно индексирование по префиксу столбца строкового типа (первые п символов строки). При этом спецификация меняется с



column list на column list (n). Например, перрый из операторов внизу использует для создания индекса столбцы полностью. А второй оператор, хоть и аналогичен первому, но использует для создания индекса только часть столбца:

CREATE TABLE my tbl (

name CHAR(30), address CHAR(60), INDEX (name, address)

CREATE TABLE my tbl (

name CHAR(30),

address CHAR(60),

INDEX (name(10), address(20))

В некоторых случаях индексирование по префиксу может оказаться очень кстати. Длина строки индекса офаничена, поэтому для индексирования по I строке, длина которой выходит за допустимый диапазон, такая возможность будет уместной. Индексирование по префиксу очень кстати при индексировании по столбцу типа blob или text в таблицах формата MylSAM.

Индексирование по префиксу накладывает определенные офаниче-ния на возможность внесения изменений в длину таких столбцов. Нельзя делать их длину меньше длины индексируемого префикса. Это можно сделать, только удалив предварительно индекс и воссоздав его потом с коротким префиксом.

Удаление индексов

Удаление индексов производится операторами drop index или alter table. Аналогично оператору create index, оператор drop index внутренне обрабатывается как оператор alter table. Он был впервые введен в СУБД MySQL версии 3.22. Операторы удаления индексов имеют следующий синтаксис:

DROP INDEX index name ON tbl name

ALTER TABLE tbl name DROP INDEX index name

ALTER TABLE tbl name DROP PRIMARY KEY

Два первых оператора идентичны. Третий используется только для удаления индекса primary key. В последнем случае нужно указывать имя индекса, так как таблица может иметь только один индекс с таким именем. Если такой индекс создан не бьш, а таблица имеет один или несколько индексов unique, будет удален первый из них.

Удаление столбцов из таблицы влияет на индексы. Удаляя столбец из таблицы, вы тем самым удаляете этот столбец из индекса. Удаляя все индексируемые столбцы из таблицы, вы удаляете весь индекс.



1 ... 57 58 59 [ 60 ] 61 62 63 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика