![](/user_photo/2706_HbeT2.jpg)
- •Введение.
- •Лекция1.Введениевклиент-серверныеСубд.
- •InterbaseSqlServer.Общиесведения.
- •Платформы
- •Типыприложений
- •ФайлыбазыданныхInterBase
- •Лекция3.Триггерыихранимыепроцедуры
- •Хранимыепроцедуры(StoredProcedures)
- •Терминаторы
- •Заголовок
- •Телопроцедуры
- •Блоккодапроцедуры
- •Операторприсваивания
- •УсловныйоператорIf…then…else
- •ОператорSelect
- •ЦиклForselecTиSuspend
- •ЦиклWhile…do
- •ОператорыInsert,update,delete
- •ОператорExecuteprocedure
- •Исключения
- •СобытияиоператорPost_event
- •Измененияиудаленияхранимыхпроцедур
- •Примерысозданияивызовахранимыхпроцедур
- •Генераторы
- •Увеличениешагагенератора
- •Триггеры
- •ПеременныеNeWиOld
- •Реализацияавтоинкрементныхключевыхполей
- •Лекция4.Транзакции.Механизмтранзакций
- •Атомарность(Atomicity)
- •Согласованность(Consistency)
- •Изолированность(Isolation)
- •Устойчивость(Durability)
- •Неявныйиявныйстарттранзакций
- •Кактранзакцияработает
- •Уровниизолированноститранзакций
- •Параметрытранзакций
- •Компонентыдоступакданнымивизуальныекомпоненты МеханизмыдоступакБд
- •ПроблемырусскихбукввInterBase
- •Лекция5. Основы языка php. Функции php для работы с субд ИсторияPhp
- •ВозможностиPhp
- •Основнойсинтаксис
- •Разделениеинструкций
- •Комментарии
- •Переменные,константыиоператоры
- •Переменные
- •Константы
- •Операторы
- •Типыданных
- •Типboolean(булевилилогическийтип)
- •Типinteger(целые)
- •Типfloat(числасплавающейточкой)
- •Типstring(строки)
- •Одинарныекавычки
- •Двойныекавычки
- •Типarray(массив)
- •Определениеприпомощиarray()
- •Определениеспомощьюсинтаксисаквадратныхскобок
- •Типobject(объекты)
- •Типresource(ресурсы)
- •Решениезадачи
- •Построениеинтерфейсадлядобавленияинформации
- •Установкасоединения
- •Выборбазыданных
- •Получениеспискаполейтаблицы
- •Отображениеспискаполейвhtml-форму
- •Записьданныхвбазуданных
- •Отображениеданных,хранящихсявMySql
- •Заключение
Генераторы
Генератораминазываетсяспециальнаяобластьданных,котораяхранитсявбазеданныхисодержиткакоетоцелоечисло.Генераторы-этосчетчики,новотличиеотлокальныхБД,увеличениезначенияэтихсчетчиковосуществляетсяспомощьютриггеров.
Восновном,генераторыиспользуютдлясозданияавтоинкрементныхполей.Длякаждоготакогополяпридетсясоздаватьсобственныйгенератор.Генератор,совместнососпециальнымтриггером,гарантирует,чтозначениеэтогополявсегдабудетуникальным.СоздаютсягенераторыспомощьюоператораCREATEGENERATOR:
CREATEGENERATORGen1;
Внимание!Генераторыможносоздавать,ноудалитьихнеполучится,поэтомувреальнойбазеданныхпреждепродумайте,какиегенераторыувасбудут,апотомтолькосоздавайтеих.ОткройтеутилитуIBConsole,войдитевлокальныйсервериоткройтенашубазуданныхFIRST.ЗатемзапуститеInteractiveSQL,исоздайтегенераторGen1,каквпримеревыше.Затемвыделитераздел"Generators"вдеревесерверов,ивправойчастивыувидитенашгенератор,атакжееготекущеезначение:
Рис.3.3.Раздел"Generators"базыданных
Каквидноизрисунка,генераторусразуприсваиваетсязначение0.Темнеменее,воизбежаниевозможныхошибок,вторымшагомнередкоприсваиваютгенераторуэтозначениеоператоромSETGENERATOR:
SETGENERATORGen1TO0;
ВыполнитеэтотпримерспомощьюутилитыInteractiveSQL.Такимобразом,генераторамможноприсваиватьлюбоецелоезначение,дажеотрицательное.
Иногдабываетнеобходимымприсваиватьгенераторуненулевое,адругоезначение.Например,есливыперенеслибазуданныхизParadoxвInterBase.Вэтомслучае,таблицаужесодержитзаписи,которыепронумерованы.АвтоинкрементноеполеприпереносепревращаетсявINTEGER.Требуетсяпосмотретьпоследнеезначениеэтогополя,иприсвоитьгенераторуименноего.
Увеличениешагагенератора
Каквыпонимаете,длявводакаждойследующейзаписивовсенетнеобходимостиоткрыватьIBConsole,смотретьзначениегенератораивручнуюустанавливатьновоезначение.ДляэтогоиспользуетсяспециальнаяпроцедураGEN_ID()(выполнятьэтотпримерненужно):
GEN_ID(Gen1,1)
Процедурасодержитдвапараметра.Первый-имягенератора,второй-шаг,накоторыйтребуетсяувеличитьзначение.Обычноэтупроцедуруиспользуютвтриггерах,номожновыполнитьееивручную,спомощьюInteractiveSQL.Выполнитеследующийзапрос:
SELECTGEN_ID(Gen1,1)FROMRDB$DATABASE;
ВнижнемокнеInteractiveSQLбудетвыведенрезультат:
Рис.3.4.РезультатSQL-запроса
Каквидноизрисунка,мыполучилизначение1.ВыполнитетакжекомандуCOMMIT,чтобызавершитьтранзакцию,затемзакройтеInteractiveSQL.ВыделитеразделGeneratorsиубедитесь,чтозначениеизменилось.Что,собственно,произошло?Деловтом,чтокогдавысоздаетеновуюбазуданных,InterBaseпреждевсегосоздаетвнейсобственныесистемныетаблицы.ОднойизтакихтаблицявляетсяRDB$DATABASE,котораявсегдахраниттолькооднузаписьснекоторымисистемнымипараметрамибазыданных.Этужетаблицуиногдаприменяютдля"пустых"запросов,которыевозвращаютзначениеоднойизпеременныхиливычисляемоезначение.Нашимпредыдущимзапросоммывначалеувеличилизначениегенераторана1,затемвывелиегонаэкраноператоромSELECT.Узнатьтекущеезначениегенератора,неувеличиваяего,можнострокой:
SELECTGEN_ID(Gen1,0)FROMRDB$DATABASE;
гдевпроцедуреGEN_ID()указываетсяшаг0.
Посколькугенераторможетхранитьотрицательныезначения,ашагпроцедурыGEN_IDтакжеможетбытьотрицательным,томожноустановитьиобратныйавтоинкремент,гдезначениянеувеличиваются,ауменьшаются.Впрочем,такойвозможностьюобычнонепользуются.
Совет:еслигенераторуженаходитсявиспользовании,врабочейбазеданных,НИКОГДАнепереустанавливайтеегозначенийвручную-эточреватопорчейцелостностиидостоверностиданных.