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

Представление. Триггеры

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

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

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

CREATE VIEW Имя_представления [(Список_столбцов)]

As Инструкция SELECT

Пример1: Создать таблицу с данными о сотрудниках.

CREATE TABLE Sotrudniki

(Nomer Integer Not NULL Primary Key,

Fam VarChar(20),

Name VarChar(20),

Otdel VarChar(20),

Tel VarChar(20),

Zarplata Integer);

К сведениям о телефонах должны иметь все сотрудники, но при этом они не должны знать о зарплате своих коллег.

CREATE VIEW Telefonu

As Select Nomer, Fam, Name, Otdel, tel

From Sotrudniki

Представление с ограниченным доступ к некоторым столбцам таблицы называет вертикальным подмножеством таблиц. Можно образовать горизонтальное подмножество таблиц, например, так:

CREATE VIEW Prosmotr

As Select * From Sotrudniki

Where Zarplata < 10000

Можно образовать комбинацию горизонтального и вертикального подмножества:

CREATE VIEW Prosmotr2

As Select Nomer, Fam, Name, Otdel, tel

From Sotrudniki

Where Zarplata < 10000

Пример2: Вывести имя и фамилию вместе.

CREATE VIEW Prosmotr3(polnoe_imya)

As Select Fam || “ “ || Name

From Sotrudniki;

Удалить просмотр можно следующей командой:

DROP VIEW Имя_представления

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

  1. В просмотр должны быть включены поля только одной таблицы

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

  3. Просмотр не должен содержать статистических функций, обращение к хранимым процедурам и операторов DISTINCT и HAVING

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

CREATE VIEW Prosmotr4

As Select * From Sotrudniki

Where Otdel=’Информационные технологии’;

Создать представления для отображения данных о товарах. (товар, название товара, цена за единицу, дата прихода и количество).

CREATE VIEW Prosmotr4

As Select Tovary.Tovar, Zena, DatPrihod, Kolvo

From Tovary, Prihod

Where Tovary.Tovar = Prihod.Tovar.;

Триггерами называются подпрограммы, которые выполняются автоматически на стороне сервера в ответ на изменение данных в таблицах БД. Триггеры никогда не вызываются напрямую. В триггерах существует возможность обращаться к старым и новым значениям столбцов с помощью встроенных переменных OLD и NEW. Триггер может выполняться до наступления какого-либо события (BEFORE) или после него (AFTER). Создаётся триггер следующей инструкцией

CREATE TRIGGER Имя_триггера

FOR имя_таблицы

[ACTIVE/ INACTIVE]

{BEFORE/AFTER}{INSERT/DELETE/UPDATE}

[POSITION Число]

As BEGIN

Операторы триггера

END

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

DROP TRIGGER Имя_триггера

Пример. В расчётной ведомости введём отдельный столбец, показывающий рост зарплаты в процентах при её последнем изменении.

CREATE TABLE Zarplata

(Nomer Integer Not NULL,

Summa Float,

Last_change Float);

INSERT INTO Zarplata values (1,3400,0);

INSERT INTO Zarplata values (2,2800,0);

CREATE TRIGGER ROST FOR ZARPLATA

BEFORE UPDATE

AS BEGIN

If (old.summa <> new.summa) then

new.last_change=new.summa-old.summa*100/old.summa;

END;

Update Zarplata Set summa=5000

Where Nomer=1;

Select * From Zarplata