Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Создание автоинкрементных столбцов





Автоинкрементный столбец (autoincrement field) – это целочисленный столбец, значение которого автоматически увеличивается или уменьшается с постоянным шагом при добавлении новой строки. Например, у первой строки этот столбец =1, у второй 2, у третьей 3, и т.д. Когда строка удаляется (например, с номером 3), значение 3 все равно больше использоваться не будет, поскольку автоинкрементный столбец всегда только увеличивается, не возвращаясь назад. Автоинкрементные столбцы используются для создания суррогатных первичных ключей.

Создание автоинкрементных столбцов в Microsoft SQL Server

Автоинкрементный столбец объявляется при описании столбца командами CREATE TABLE или ALTER TABLE с помощью конструкции

IDENTITY (начальное_значение, шаг_приращения)

Например,

CREATE TABLE Records(

RecNum INT IDENTITY (0,1) PRIMARY KEY,

/* первичный ключ - это автоинкреметное поле

с начальным значением 0 и шагом приращения +1*/

Field_1 CHAR (10),...-- описание прочих столбцов

);

Тип автоинкрементного столбца должен быть целочисленным (tinyint, smallint, int, bigint) или с фиксированной запятой (decimal (p, 0); numeric (p, 0)). Свойство IDENTITY не применяется совместно со свойствами DEFAULT и NULL. Разрешается иметь только один автоинкрементный столбец в таблице.

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

Создание автоинкрементных столбцов в MySQL

MySQL разрешает иметь в таблице только один автоинкрементный столбец (счётчик). Он объявляется флагом AUTO_INCREMENT при создании таблицы. Тип столбца-счетчика – беззнаковый целый.

Таблицы типа MyISAM и InnoDB следят за тем, какие значения генерируются счетчиком, поэтому при удалении какой-либо записи ее порядковый номер не будет использован повторно. В таблицах других типов порядковый номер вычисляется путем прибавления единицы к максимальному значению столбца. Если из таблицы удалить все записи, нумерация снова начнется с единицы.

Тип таблицы и начальное значение счетчика можно задать табличными опциями

TYPE = тип_таблицы

AUTO_INCREMENT = начальное_значение /* действует только

на таблицы типа MyISAM */

Опция тип_таблицы определяет формат хранения таблицы и функциональные возможности. MySQL версии 3.23 поддерживает семь типов таблиц: ISAM, MyISAM (по умолчанию), Heap, Merge, InnoDB, Gemini, BerkleyDB (BDB). Поддержка транзакций реализована только в последних трех типах таблиц. Табличные опции указываются после операторов CREATE TABLE или ALTER TABLE, например:

CREATE TABLE Records(

/* столбцы */

RecNum INT UNSIGNED NOT NULL AUTO_INCREMENT,

Field_1 CHAR (10) NULL,

... /* описание прочих столбцов */

/* ограничения целостности */

PRIMARY KEY (RecNum)

)

/* табличные опции */

TYPE = MYISAM

AUTO _ INCREMENT = 100

Создание автоинкрементных столбцов в Firebird

Автоинкрементные столбцы реализуются с помощью генераторов и триггеров.

Генератор (generator) – это специальный объект базы данных. Он представляет собой целочисленную 4-байтовую переменную.

Генератор создается командой

CREATE GENERATOR Имя_генератора

По умолчанию значение нового генератора равно 0. Его можно изменить командой

SET GENERATOR Имя_генератора TO новое_значение

Новое значение может быть числом от –231 до +(231–1).

Для получения следующего значения генератора предназначена функция

GEN_ID (Имя_генератора, шаг_приращения)

Функция прибавляет шаг _ приращения к текущему значению генератора и возвращает полученное число. Шаг приращения может быть положительным или отрицательным.

Для создания автоинкрементного столбца нужно предварительно создать генератор. Значение генератора будет заноситься в ячейку автоинкрементного столбца при добавлении новой строки. Эта операция автоматически выполняется триггером.

Триггер (trigger) – блок команд SQL, которые автоматически выполняются сервером в ответ на операцию с таблицей. Каждый триггер привязан к конкретной таблице. По типам операций, вызывающих запуск триггера, триггеры делятся на три типа:

· INSERT – добавление новых строк,

· UPDATE – модификация существующих строк,

· DELETE – удаление строк.

По времени запуска триггеры Firebird делятся на два типа:

· BEFORE – триггер запускается до внесения изменений в таблицу;

· AFTER – триггер запускается после фиксации изменений в таблице.

Если с одним и тем же событием (например, модификацией строк таблицы) связано несколько триггеров, то они вызываются по очереди в соответствии со своей позицией (0,1,2,…).

Триггер создается оператором CREATE TRIGGER

CREATE TRIGGER Имя_триггера FOR Имя_таблицы

{ BEFORE | A FTER } { INSERT | UPDATE | DELETE }

[ POSITION значение_позиции ]

AS BEGIN

< тело триггера. Операторы разделяются; >

END < символ-ограничитель >

Символ-ограничитель по умолчанию – точка с запятой. Но поскольку ";" используется в теле триггера, то требуется переопределить ограничитель. Для этого используется оператор

SET TERM новый _ ограничитель

Новый_ограничитель – это произвольная (в пределах разумного) подстрока.

Ниже приведен пример создания триггера на вставку строк. Триггер заносит в ячейку автоинкрементного столбца новое значение генератора.


/*создаем таблицу – столбец RecNum будет автоинкрементным*/

CREATE TABLE Records(

RecNum INT NOT NULL PRIMARY KEY,

...); /* прочие столбцы */

/* создаем генератор (по умолчанию равен 0) */

CREATE GENERATOR RecNum_Gen;

/* создаем триггер: предварительно

меняем символ-ограничитель с ";" на "!!" */

SET TERM!!;

/* объявление триггера */

CREATE TRIGGER CreateRecNum FOR Records

BEFORE INSERT

POSITION 0

AS BEGIN

NEW.RecNum = GEN_ID (RecNum_Gen, 1);

END!!

/* меняем символ-ограничитель обратно */

SET TERM;!!

NEW – это имя виртуальной таблицы, содержащей добавляемую строку. Таблица NEW состоит из одной строки, и существует только внутри тела триггера. Для изменения ее ячейки RecNum используется оператор

NEW.RecNum = GEN_ID (RecNum_Gen, 1);

Функция GEN_ID автоматически увеличивает значение генератора на 1, и возвращает его новое значение.


Date: 2016-07-25; view: 399; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию