Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
165
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

202 Глава Встроенные фу нкции

Эта функция возвращает если аргумент равен в противном случае возвра щается 0 (листинг 12.128).

Процедуры

Процедуры — это функции, которые выполняются над результатами запроса до то го, как эти результаты будут возвращены клиенту. Процедуры вызываются в конце инструкции SELECT. В MySQL включена процедура: analyse

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

Процедура analyse анализирует таблицу результатов запроса (листинг 12.129). Можно ограничить максимальное число анализируемых элементов, а также макси мальный объем памяти, используемой в процессе анализа.

SELECT Name, Price

FROM item

WHERE ID IN

PROCEDURE \G

Процедуры 203

row

Brush Toothbrush 4 10 0

Nulls: 0

NULL

NOT NULL

*************************** 2. row ***************************

1.25

4

4 0 Nulls: 0

Std: 0.79

NOT NULL 2 rows in set sec)

ИНСТРУКЦИИ SQL

В этой главе.

Комментарии

Полный список инструкций

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

ными буквами в отличие от пользовательских идентификаторов.

Для каждой инструкции приводится ее прототип. Слова, написанные прописными буквами, являются зарезервированными, как SELECT. Строчными буквами даны па раметры, которые могут быть литералами, именами столбцов или таблиц. Элементы, находящиеся в квадратных скобках, считаются необязательными. Иногда допускается несколько уровней необязательных параметров. Символами вертикальной черты раз деляются альтернативные варианты выбора.

Комментарии

Комментарии — это текст, сопровождающий инструкции и помогающий читате лям разобраться в назначении программного кода. Программа MySQL игнорирует любой текст, стоящий после символа или двух символов косой черты с после дующим пробелом. Игнорируется также текст, заключенный в блок * и *

Комментарий, начинающийся с двух дефисов, описан в стандарте SQL. Но разра ботчики MySQL решили, что обязательным признаком такого комментария должен быть пробел после дефисов. Это позволяет изб егать неоднозначности таких конст рукций, как, например, вычитание отрицательного числа. Поддержка подобных ком ментариев помогает переносить в MySQL базы данных, созданные в других СУБД (об этом пойдет речь в главе 28, "Перенос данных в разные

В листинге 13.1 показаны три эквивалентных варианта комментариев.

206 Глава Инструкции SQL

SELECT Определяем текущее время

SELECT — Определяем текущее время

Определяем текущее время

SELECT

Полныйсписокинструкций

Ниже описаны все инструкции, поддерживаемые в MySQL.

ALTER TABLE

Инструкция ALTER TABLE позволяет менять определение таблицы. Для этого не обходимо иметь привилегии ALTER, CREATE и INSERT. Общий ее формат таков:

ALTER

TABLE имя

спецификация

Поскольку программа MySQL способна вносить незаметные изменения в опреде ления таблиц, существует вероятность того, что инструкция ALTER не возымеет ни какого эффекта. Подробнее о такого рода изменениях пойдет речь при рассмотрении инструкции CREATE TABLE:

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

Флаг IGNORE заставляет программу MySQL игнорировать дубликаты, если данные, уже находящиеся в таблице, конфликтуют с ее новым определением. Например, когда столбец, содержащий дублирующиеся данные, объявляется первичным ключом, то по умолчанию программа отказывается вносить изменения. При наличии флага изменения будут учтены, а вседублирующиеся записи, кроме одной, — выброшены.

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

Ниже описаны все возможные варианты спецификаций.

ADD[COLUMN] определение [FIRST | AFTERстолбец]

С помощью этой спецификации к таблице добавляется новый столбец. Формат определения столбца должен быть таким же, как и в инструкции CREATE TABLE. По умолчанию столбец добавляется в конец списка, но с помощью ключевого слова FIRST егоможно объявить первым, а с помощью предложения стоящим по сле заданного столбца.

В листинге 13.2 демонстрируется добавление двух столбцов, располагаемых в оп ределенном порядке. Возможно, эти столбцы не были учтены при создании таблицы.

Полный список инструкций 207

Другая причина добавления столбцов — введение первичного ключа. Так, в листин

ге 13.3 в таблицу вставляется

В результате каждая строка получит

уникальный идентификатор в поле

 

ALTER TABLE address

 

ADD

AFTER

ADD prefix

FIRST

ALTER TABLE address

ADD ID INT NOT NULL AUTO INCREMENT PRIMARY KEY FIRST

ADD [COLUMN] (определение,

С помощью этой в конец списка столбцов добавляется группа вых столбцов. Определения столбцов разделяются запятыми (листинг 13.4).

ALTER TABLE address

ADD middleName prefix

ADD [CONSTRAINT имя] FOREIGN имя ссылка

Эта спецификация существует для совместимости с другими СУБД. Факт вования столбцов не проверяется, а информация об ограничении не сохраняется в таблице. Разработчики MySQL планируют добавить функции хранения внешних клю чей в версию 4.0. Спецификация ссылки рассматривается в разделе, посвященном ин струкции CREATE TABLE.

ADD FULLTEXT [имя] (столбец,

Эта спецификация предназначена для добавления к указаннымстолбцам текстового индекса. Об этом рассказывалось в главе 11, "Типы столбцов и индексов".

ADD | [имя] (столбец,

Эта спецификация позволяет добавить индекс к одному или нескольким столбцам (листинг 13.5). Ключевые слова KEY и INDEX являются синонимами. Аналогичную функцию выполняет также инструкция CREATE INDEX.

208 Глава Инструкции SQL

ALTER TABLE address

ADD INDEX

ADD PRIMARY KEY (столбец,

С помощью этой спецификации к добавляется первичный ключ (листинг 13.6). У таблицы может быть только один такой ключ, поэтому щий ключ необходимо предварительно удалить.

ALTER TABLE address

ADD PRIMARY

ADD UNIQUE [имя] (столбец,

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

ALTER [COLUMN] столбец DROP DEFAULT

С помощью этой спецификации из определения столбца удаляется описание зна чения по умолчанию (листинг 13.7). Для столбца будет выбрано новое стандартное значение на основании его типа и допустимости значений NULL. Если значенияNULL разрешены, выбор будет сделан в их пользу. В противном случае будет выбрано зна чение 0 или пустая строка.

ALTER TABLE address

ALTER prefix DROP DEFAULT

ALTER [COLUMN] столбецSET DEFAULT литерал

Эта спецификация назначает столбцу значение по умолчанию (листинг 13.8). По добное изменение не затрагивает существующие записи.

ALTER TABLE address

ALTER prefix SET DEFAULT

Полный список инструкций 209

CHANGE [COLUMN] столбец определение

С помощью этой спецификации меняется определение столбца: его размер ность и тип. Подобная возможность не предусмотрена в стандарте языка SQL. Другие СУБД тоже допускают модификацию определений столбцов, но программа MySQL является наиболее гибкой в этом плане.

MySQL пытается привести существующие данные к новому типу. Если столбец проиндексирован, его размерность не может стать меньше, чем размерность индекса. Например, наличие индекса первых 16 символов столбца типа VARCHAR означает, что размерность столбца тоже должна составлять не менее 16 символов.

В листинге 13.9 показано, как тип столбца меняется с VARCHAR на Обра тите внимание на то, что имя столбца повторяется дважды. Это не ошибка. Первый раз идентифицируется существующий столбец, а второй раз дается его новое определение.

ALTER TABLE address CHANGE prefix prefix

DROP [COLUMN] столбец

Эта спецификация предназначенадля удаления столбца из таблицы и не является частью стандарта языка SQL (листинг 13.10). Индексы, охватывающие удаляемый столбец, автоматически перестраиваются. Если в индекс входил только один этот столбец, индекс удаляется.

ALTER TABLE address

DROP

DROP PRIMARY KEY

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

DROP INDEX индекс

С помощью этой спецификации удаляется указанный индекс (листинг По добная возможность не предусмотрена в стандарте.

ALTER TABLE address

DROP INDEX

210 Глава Инструкции SQL

MODIFY[COLUMN]определение

Эта спецификация служит для изменения определения столбца, кроме его имени (листинг 13.12). Данная возможность появилась в MySQL под влиянием СУБД Oracle.

ALTER TABLE address

MODIFY prefix

ORDER BY столбец

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

RENAME [TO] имя

Эта спецификация позволяет менять имя таблицы (листинг 13.13). Аналогичную функцию выполняет инструкцияRENAME TABLE.

ALTER TABLE address

RENAME

Опции

В инструкции ALTER можно задавать те же самые табличные опции, что и в инст рукции CREATE TABLE (см. ниже). Например, разрешается менять тип таблицы или максимальное число записей в ней (листинг 13.14).

ALTER TABLE address

TYPE=BDB

ANALYZE TABLE

Инструкция ANALYZE TABLE анализирует и запоминает распределение значений ключей указанной таблицы, что повышает эффективность операций объединения. Синтаксис инструкции таков:

ANALYZE TABLE ИМЯ

Полный список инструкций

Эта инструкция выполняет те же действия, что и команда а. Разре шается анализировать только таблицы типа или BDB.

В листинге 13.15 приведены результаты анализа таблицы пользователей. Если с момента последнего анализа в таблицу не вносились никакие изменения, будет выда но сообщение, стоящее в четвертом столбце.

1 row in set (0.00 sec)

BACKUP TABLE

Инструкция BACKUP TABLE записывает информацию о заданных таблицах в ука каталог. Формат инструкции таков:

BACKUP TABLE имя

ТО каталог

Во время выполнения инструкции программа MySQL блокирует таблицу в режиме "только чтение", после чего копирует файлы с расширениями и в требуе мый каталог и снимает блокировку. За один раз блокируется одна таблица. Чтобы сделать мгновенный снимок таблиц, заблокируйте их с помощью инструкции LOCK TABLES.

Указанный каталог должен быть доступен для записи пользователю, запустившему демон MySQL, а копируемые таблицы должны иметь тип MylSAM. В листинге 13.16 показано копирование таблиц, хранящих информацию о привилегиях.

BACKUP TABLE host, tables_priv, user TO

6 rows in set (0.11 sec)