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

1 ... 55 56 57 [ 58 ] 59 60 61 ... 264


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

В главе 1, Знакомство с СУБД MySQL и SQL , мы уже рассмотрели основной синтаксис оператора create table. Описание столбцов таблиц приведено в главе 2, Работа с данными в MySQL . Я предполагаю, что читатель знаком с этими главами, поэтому не будем повторяться. Обратим внимание на добавления, сделанные в синтаксисе оператора create table В версии 3.23 (они перечислены ниже). Это придает гибкость процедуре создания таблиц.

Спецификация типа памяти.

Создание таблицы только в том случае, если ее не сушествует (условное создание таблиц).

Временные таблицы, которые удаляются сразу же по завершении сеанса соединения.

Возможность создания таблицы методом выборки данных из уже существуюших таблиц.

Спецификация типа памяти

До появления версии 3.23 все таблицы создавались только в формате isam. СУБД MySQL 3.23 позволяет создавать таблицы с использованием трех форматов представления данных: myisam, isam, heap. Спецификация типа включена в оператор create table.

CREATE TABLE my tbl (i INT, с CHAR(20)) TYPE = HEAP

С помошью аналогичной конструкции в операторе alter table таблицы конвертируются из одного формата в другой:

ALTER TABLE my tbl TYPE = ISAM ALTER TABLE my tbl TYPE = MYISAM ALTER TABLE my tbl TYPE = HEAP

Метод представления данных heap надо использовать достаточно ос-орожно: таблицы хранятся в оперативной памяти и исчезают при от-лючении от сервера. Вот общие характеристики всех трех методов.

Таблицы MylSAM. Этот формат хранения таблиц в памяти, впервые появившийся в версии 3.23, является форматом хранения по умолчанию.

Файлы могут иметь длину большую, чем при использовании метода isam, при условии, что операционная система позволяет создавать файлы такой длины.

Данные сохраняются в машинно-независимом коде с первым младшим байтом впереди. Такой формат позволяет копирова-

Глава 3. Синтаксис и использование языка SQL 193

7-1729



ние данных с одного компьютера на другой, даже если их архитектуры различны.

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

Обработка параметра AUTO INCREMENT более эффективна, чем при использовании формата ISAM. (Детальное описание см. в главе 2, Работа с данными в MySQL .)

Снято несколько ограничений, налагаемых на индексируемые столбцы. Теперь такие столбцы могут содержать пустые (NULL) значения, появилась возможность индексировать столбцы типа

BLOB И TEXT.

Для упрощения проверки целостности таблиц добавлен новый флаг, который устанавливается при проверке таблицы утилитой myisamchk. Для пропуска таблиц, которые не изменялись с момента последней проверки, можно воспользоваться этой же утилитой с флагом myisamchk - fast Это ускорит выполнение задач администрирования базы данных. Таблицы снабжены также флагом, указывающим, бьша ли данная таблица закрыта правильно. Он предназначен для проверки таблиц в момент загрузки после аварийного выключения сервера или краха системы.

Таблицы ISAM. Это самый старый метод хранения таблиц в памяти, принятый за стандарт для версий, меньше 3.23. Используется до сих пор. Но в целом лучше пользоваться новым форматом MylSAM, так как он накладывает меньше ограничений. В новых версиях формат ISAM, скорее всего, будет полностью замешен форматом My ISAM

Таблицы HEAP. Этот метод хранит таблицы прямо в оперативной памяти, что значительно ускоряет работу с таблицами. При этом таблицы должны иметь строки фиксированной длины. Это означает также, что они являются временными и исчезают сразу же после отключения компьютера. Но в отличие от временных таблиц, созданных оператором CREATE TEMPORARY TABLE, таблицы, созданные с использованием этого метода, видимы для других клиентов. Этот формат предполагает наложение следующих дополнительных ограничений.

Индексы можно использовать только для сравнений типа = и < = >.

В индексируемых столбцах не должно быть пустых значений.

Нельзя использовать столбцы типа BLOB и ТЕХТ.

Нельзя использовать атрибут AUTO INCREMENT.



Условное создание таблицы

Оператор CREATE TABLE IF NOT EXISTS предназначен для создания таблицы по условию ее существования. Таким приемом можно воспользоваться в приложении, которое при создании таблицы предварительно не проверяет факта ее существования. Модификатором IF NOT EXISTS можно воспользоваться в сценариях, запускающихся из пакетных файлов. В этом варианте обычный оператор CREATE TABLE не всегда подходит. Если при первом запуске такого сценария таблицы создаются успешно, то при последующих запусках происходит ошибка, так как создаваемая таблица уже существует. При использовании предложения IF NOT EXISTS таких проблем не возникает. При первом запуске задания, как и в предьщущем случае, таблица будет создана. При последующих попытках создания файлов файл не создается, но и не генерируется код ошибки. Задание успешно продолжает выполняться.

Временные таблицы

Для создания временных таблиц предусмотрен специальный оператор CREATE TEMPORARY TABLE. Такие таблицы автоматически исчезают после завершения сеанса работы с базой данных. Это очень удобно потому, что отпадает необходимость специально удалять таблицы такого рода. Предположим, у вас работает длительный запрос и вы решаете прервать его выполнение. При этом можно совершенно не беспокоиться за судьбу временных таблиц, созданных в процессе выполнения запроса. Они все будут удалены.

В ранних версиях СУБД MySQL настоящих временных таблиц не было, за исключением тех таблиц, которых таковыми считает сам разработчик. При создании приложений, использующих такие таблицы, разработчик должен сам помнить о необходимости удалять такие таблицы из базы данных. В противном случае она будет путаться под руками и даже может вызывать появление ошибочных ситуаций.

Временная таблица будет доступна только клиенту, ее создавшему. Имя временной таблицы может совпадать с именем уже существующей постоянной таблицы. Такое повторение не является ошибкой. Создадим временную таблицу member в базе данных samp db. Постоянная таблица member на период существования временной таблицы становится недоступной, теперь все ссылки на таблицу member переадресуются на временную таблицу member. Оператор DROP TABLE member удаляет временную таблицу, а первоначальная таблица member станет видимой снова. Аналогичного эффекта можно добиться простым отключением от сервера. При последующем подключении основная таблица member снова становится доступной.

Этот механизм имеет только один уровень, т.е. невозможно создать две временные таблицы с одним именем.



1 ... 55 56 57 [ 58 ] 59 60 61 ... 264

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