Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
27.03.2016
Размер:
202.75 Кб
Скачать

Identity [(начальное_значение [, шаг_изменения] )]

Здесь начальное_значение – задает первое значение соответствующей колонки таблицы,

шаг_изменения – определяет правила вычисления следующих значений:

новое_значение = текущее_значение + шаг_изменения

Если эти параметры не указаны, то начальное значение и приращение будут равны 1.

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

Свойство IDENTITY может быть указано в таблице только для одного столбца, и этот столбец должен иметь целочисленный тип.

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

CREATE TABLE Tabl1

(

A int PRIMARY KEY IDENTITY,

B varchar (50)

)

Рассмотрим более сложные примеры создания таблиц:

CREATE TABLE jobs

(

job_id int IDENTITY(1,1) PRIMARY KEY,

job_desc varchar(50) NOT NULL,

min_lvl int NOT NULL CHECK (min_lvl >= 10),

max_lvl int NOT NULL CHECK (max_lvl <= 250)

)

CREATE TABLE employee

(

emp_id empid

CONSTRAINT PK_emp_id PRIMARY KEY

CONSTRAINT CK_emp_id CHECK (emp_id LIKE

'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or

emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),

fname varchar(20) NOT NULL,

minit varchar(1) NULL,

lname varchar(30) NOT NULL,

job_id int NOT NULL REFERENCES jobs(job_id),

job_lvl tinyint,

pub_id char(4) NOT NULL REFERENCES publishers(pub_id),

hire_date datetime NOT NULL

)

CREATE TABLE publishers

(

pub_id char(4) NOT NULL

CONSTRAINT UPKCL_pubind PRIMARY KEY

CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756')

OR pub_id LIKE '99[0-9][0-9]'),

pub_name varchar(40) NULL,

city varchar(20) NULL,

state varchar(2) NULL,

country varchar(30) NULL

)

Для определения таких ограничений, накладываемых на данные, которые невозможно описать оператором CREATE TABLE, необходимо определить триггера. Триггеры создаются с помощью предложения CREATE TRIGGER. Триггер – это набор действий, оформленных в виде процедуры, которые вызываются автоматически при выполнении в базе данных действий над данными, связанных с этим триггером. Триггер всегда привязан к конкретной таблице. Существуют три разновидности триггеров:

  • Insert – триггер: триггеры этого типа запускаются при попытке вставки данных в таблицу, на которой создан триггер, с помощью команды insert.

  • UPDATE – триггер: триггеры этого типа запускаются при попытке обновления данных в таблице, на которой создан триггер, с помощью команды UPDATE.

  • DELETE – триггер: триггеры этого типа запускаются при попытке удаления данных в таблице, на которой создан триггер, с помощью команды DELETE.

Кроме того, в СУБД MS SQL Server возможно создание AFTER и INSTEAD OF триггеров, которые запускаются после или вместо операции над данными.

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

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

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

Рассмотрим примеры выполнения предложения CREATE TRIGGER.

CREATE TRIGGER reminder

ON titles

FOR INSERT, UPDATE, DELETE

AS

EXEC master..xp_sendmail 'MaryM',

'Don''t forget to print a report for the distributors.'

Данное предложение создает триггер с именем reminder на таблице titles для всех возможных операций над данными в таблице. В задачу триггера входит отправка E-Mail c информационным сообщением, что выполняется посредством системной хранимой процедуры xp_sendmail

CREATE TRIGGER employee_insupd

ON employee

FOR INSERT, UPDATE

AS

DECLARE @min_lvl tinyint,

@max_lvl tinyint,

@emp_lvl tinyint,

@job_id smallint

SELECT @min_lvl = min_lvl,

@max_lvl = max_lvl,

@emp_lvl = i.job_lvl,

@job_id = i.job_id

FROM employee e INNER JOIN inserted i ON e.emp_id = i.emp_id

JOIN jobs j ON j.job_id = i.job_id

IF (@job_id = 1) and (@emp_lvl <> 10)

BEGIN

RAISERROR ('Job id 1 expects the default level of 10.', 16, 1)

ROLLBACK TRANSACTION

END

ELSE

IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)

BEGIN

RAISERROR ('The level for job_id:%d should be between %d and %d.',

16, 1, @job_id, @min_lvl, @max_lvl)

ROLLBACK TRANSACTION

END

Триггер создается в базе данных PUBS, которая устанавливается вместе с MS SQL Server. В данном примере создается триггер на таблицу EMPLOYEE, для операций INSERT и UPDATE. В триггере производится проверка введенных данных на соответствии определенным требованиям, для чего производится выборка данных из трех таблиц и результат выборки помещается во временные переменные. В случае если данные не соответствуют требованиям, выполняется предложение ROLLBACK, которое отменяет все раннее проведенные изменения.

В дополнение к сказанному выше, необходимо отметить такие предложения языка SQL, как:

DROP TABLE – удаление таблицы

ALTER TABLE – изменение таблицы

DROP TRIGGER – удаление триггера

ALTER TRIGGER – изменение триггера

DROP RULE – удаление правила

Кроме того, могут быть полезными системные хранимые процедуры:

sp_unbindrule – удаление связи между пользовательским типом данных и созданным правилом

sp_droptype – удаление пользовательского типа данных

Дополнительная информация:

1. Мамаев Е., Шкарина Л. Microsoft Sql Server 2000 для профессионалов. СПб: Питер 2001

Стр. 418-523, 627 -641

2. Ильиных Т.Е., Шустова Л.И. Проектирование реляционных баз данных в нотации IDF1X. М.:МИФИ, 2000 Стр.53 – 60

Соседние файлы в папке базы данных