Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Название:Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2006
- Город:Санкт-Петербург
- ISBN:5-94157-609-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ краткое содержание
Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.
Для разработчиков баз данных
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
* NOT задает отрицание условия поиска, к которому он применяется. Он имеет наивысший приоритет.
* AND создает сложный предикат, объединяет два или более предикатов, каждый из которых должен быть истинным, чтобы был истинным и весь предикат. Он следующий по приоритету.
* OR создает сложный предикат, объединяет два или более предикатов, из которых хотя бы один должен быть истинным, чтобы был истинным весь предикат. Является последним по приоритету. По умолчанию Firebird 1.5 использует сокращенную булеву логику для определения значения предиката OR. Как только один из внутренних предикатов вернет истину, вычисления останавливаются, и весь предикат вернет истину [75] Firebird 1.0.x выполняет полные логические вычисления. Сокращенное вычисление булевых выражений в более поздних версиях может быть отключено на уровне сервера при установке параметра конфигурации CompieteBooleanEvaluation. Подробности см. в главе 3.
.
Вот пример логического предиката:
COLUMN_l = COLUMN_2
OR ( (COLUMN_1 > COLUMN_2 AND COLUMN_3 < COLUMN_1)
AND NOT (COLUMN_4 = CURRENT_DATE) )
Опишем результат такого предиката. Если COLUMN_1 и COLUMN_2 будут равны, то вычисление останавливается, и предикат возвращает истину.
В противном случае проверяется следующий предикат - с двумя вложенными предикатами. Первый вложенный предикат сам имеет два вложенных предиката, оба из которых должны быть истинными, чтобы этот предикат был истинным. Если COLUMN_1 меньше, чем COLUMN_2, то вычисление останавливается, и весь предикат вернет ложь.
Если COLUMN_1 больше, то COLUMN_3 сравнивается с COLUMN_1. Если значение COLUMN_3 больше или равно COLUMN_1, то вычисление останавливается, и весь предикат вернет ложь.
Иначе производится вычисление последнего предиката. Если COLUMN_4 равно текущей дате, то весь предикат вернет ложь, в противном случае он вернет истину.
Оператор OR В Firebird является включающим ИЛИ (одно условие или все условия должны быть истинными). Исключающее или (которое дает истину, только когда ровно одно условие является истинным, а все остальные ложными) не поддерживается.
Предикат IS [NOT] NULL
IS NULL и его противоположность IS NOT NULL являются парой предикатов, которые не используют группирование. Поскольку NULL не является значением, эти операторы не являются операторами сравнения. Они проверяют утверждение, что объект в левой части имеет значение (IS NOT NULL) или не имеет значения (IS NULL).
Если значение имеется, то IS NOT NULL возвращает истину независимо от содержимого, размера или типа данных значения.
Новички в SQL иногда путают ограничение NOT NULL с предикатами is [NOT] NULL. Общая ошибка считать, что IS NULL и IS NOT NULL проверяют, был ли определен столбец с ограничением NOT NULL. Это не так. Они тестируют текущее содержимое столбца на наличие или отсутствие значения.
Предикат is [NOT] NULL может быть использован для проверки входных данных, помещаемых в столбцы таблиц базы данных, имеющих ограничения NOT NULL. Обычно эти предикаты применяются в триггерах BEFORE INSERT (до добавления).
Более подробную информацию о NULL см. В разд. "Рассмотрение NULL".
Предикаты существования
Последняя группа предикатов включает предикаты, которые используют подзапросы для передачи значений для различного вида утверждений в условиях поиска. Ключевые слова для этих предикатов ALL, ANY, EXISTS, IN, SINGULAR и SOME. Они называются предикатами существования, потому что все они используются в предикатах поиска, которые разными способами проверяют существование значения в левой части предиката в выходных результатах включенных запросов к другим таблицам.
Все эти предикаты- описанные в табл. 21.6- используют в том или ином виде подзапросы. Тема подзапросов подробно рассматривается в главе 22.
Таблица 21.6. Предикаты существования
Предикат |
Назначение |
ALL |
Проверяет, является ли сравнение истинным для всех значений, возвращенных подзапросом |
[NOT] EXISTS |
Существует ли (или нет) по крайней мере одно значение в выходном результате подзапроса |
[NOT] IN |
Существует ли (или нет) по крайней мере одно значение в выходном результате подзапроса |
[NOT] SINGULAR |
Проверяет, возвращает ли подзапрос в точности одно значение. Если возвращается NULL или более одного значения, то SINGULAR дает ложь (a NOT SINGULAR- истину) |
SOME |
Проверяет, является ли сравнение истинным по крайней мере для одного значения, возвращаемого подзапросом |
ANY |
Проверяет, является ли сравнение истинным по крайней мере для одного значения, возвращаемого подзапросом, SOME и ANY эквивалентны |
Самый полезный из всех предикатов существования - EXISTS предоставляет самый быстрый из всех возможных методов способ проверки существования значения в другой таблице.
Часто в хранимых процедурах или запросах вам может понадобиться узнать, существуют ли в таблице строки, соответствующие некоторому набору критериев. Вас не интересует, сколько существует таких строк - нужно только определить, есть ли хотя бы одна. Стратегия выполнения COUNT(*) с последующей проверкой, что полученный результат больше нуля, дорого стоит в Firebird.
! ! !
ВНИМАНИЕ! Счетчик строк, полученный в контексте одной транзакции для проверки условия последующей работы в другой транзакции, - например, для вычисления значения "следующего" ключа - является совершенно ненадежным.
. ! .
Стандартный предикат SQL EXISTS (значение-подзапроса) и его противоположный аналог NOT EXISTS дают способ выполнения проверки существования набора, который является очень дешевым с точки зрения используемых ресурсов. Он не генерирует выходной набор, а просто проходит по таблице, пока не найдет строку, соответствующую условиям в подзапросе. В этот момент возвращается истина. Если же не находится ни одной строки, то возвращается ложь.
В первом примере EXISTS проверяет условия для выполнения изменения в операторе динамического SQL:
UPDATE TABLEA
SET COL6 ='SOLD'
WHERE COL1 =99
AND EXISTS(SELECT COLB FROM TABLEB WHERE COLB = 99);
Оператор, подобный нашему примеру, обычно использует заменяемые параметры в правой части предикатов в предложении WHERE.
В действительности многие подзапросы в предикатах EXISTS являются коррелированными, то есть условия поиска подзапроса связаны отношением с одним или более столбцами главного запроса. Возьмем предыдущий пример и заменим жестко закодированную константу в условии поиска ссылкой на столбец. Более реальный запрос может быть таким:
UPDATE TABLEA
SET TABLEA.COL6 ='SOLD'
WHERE EXISTS(SELECT TABLEB.COLB FROM TABLEB
WHERE TABLEB.COLB = TABLEA.COL1) ;
Действием такого выражения существования будет: "Если в таблице TABLEB существует хотя бы одна соответствующая строка, то выполнить изменение".
Читать дальшеИнтервал:
Закладка: