Программирование в СУБД SQL Server (язык Transact-SQL) Индексы. DCL

Содержание

Слайд 2

22.12.2017 Горбунов О.Е. Ограничители [ ] Пример: CREATE TABLE [Temp SELECT

22.12.2017

Горбунов О.Е.

Ограничители

[ ]
Пример:
CREATE TABLE [Temp SELECT Table]
([Column 1] int PRIMARY KEY,
[Column

2] int);
SELECT *
FROM [Temp SELECT TABLE];
DROP TABLE [Temp SELECT Table];
Слайд 3

22.12.2017 Горбунов О.Е. Триггеры Триггеры представляют собой хранимые процедуры, которые вызываются

22.12.2017

Горбунов О.Е.

Триггеры

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

определенных событий (как правило, выполнении DML-операторов).
Основные задачи
проверка корректности введенных данных и выполнение сложных ограничений целостности данных;
выдача предупреждений, напоминающих о необходимости выполнения некоторых действий при обновлении таблицы;
накопление аудиторской информации посредством фиксации сведений о внесенных изменениях и тех лицах, которые их выполнили;
поддержка репликации.
Слайд 4

22.12.2017 Горбунов О.Е. Триггеры Создание триггера: CREATE TRIGGER ON { }

22.12.2017

Горбунов О.Е.

Триггеры

Создание триггера:
CREATE TRIGGER <имя_триггера>
ON { <таблица> }
{ AFTER

| INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS
<тело_триггера>
Удаление триггера:
DROP TRIGGER <имя_триггера>;
Слайд 5

22.12.2017 Горбунов О.Е. Триггеры Inserted – таблица со строками, которые будут

22.12.2017

Горбунов О.Е.

Триггеры

Inserted – таблица со строками, которые будут вставлены по завершению

транзакции триггера;
Deleted - таблица со строками, которые будут удалены по завершению транзакции триггера;
@@rowcount – количество строк, обработанных последней командой;
ROLLBACK TRANSACTION – отмена изменений, которые пытается выполнить пользователь.
Слайд 6

22.12.2017 Горбунов О.Е. Триггеры Пример CREATE TRIGGER CheckInsertTrigger ON Deal AFTER

22.12.2017

Горбунов О.Е.

Триггеры

Пример
CREATE TRIGGER CheckInsertTrigger
ON Deal AFTER INSERT AS
IF @@ROWCOUNT=1
BEGIN
IF NOT

EXISTS(SELECT * FROM inserted WHERE inserted.Quantity<=ALL(SELECT Wharehouse.Rest FROM Wharehouse, Deal WHERE Wharehouse.ItemCode= Deal.ItemCode))
BEGIN
ROLLBACK TRAN; PRINT ‘Transaction was cancelled!‘
END
END
Слайд 7

22.12.2017 Горбунов О.Е. Курсоры Курсор в SQL – это область в

22.12.2017

Горбунов О.Е.

Курсоры

Курсор в SQL – это область в памяти базы данных, которая

предназначена для хранения последнего оператора SQL.
Статический курсор. Информация читается из базы данных один раз и хранится в виде моментального снимка, поэтому изменения, внесенные в базу данных другим пользователем, не видны. В статический курсор внести изменения невозможно, поэтому он всегда открывается в режиме "только для чтения".
Динамический курсор. При использовании динамических курсоров не создается полная копия исходных данных, а выполняется динамическая выборка из исходных таблиц только при обращении пользователя к тем или иным данным.
Слайд 8

22.12.2017 Горбунов О.Е. Курсоры Объявление курсора DECLARE имя_курсора CURSOR [LOCAL |

22.12.2017

Горбунов О.Е.

Курсоры

Объявление курсора
DECLARE имя_курсора CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC] [READ_ONLY | OPTIMISTIC]
FOR SELECT_оператор [FOR UPDATE [OF имя_столбца[,...n]]]
Пример
DECLARE ClientCurs CURSOR SCROLL FOR SELECT * FROM Client;
DECLARE @ClientCursVar CURSOR;
SET @ClientCursVar=ClientCurs;
Либо можно при присваивании указывать описание:
SET @ClientCursVar=CURSOR LOCAL SCROLL FOR SELECT * FROM Client;
Слайд 9

22.12.2017 Горбунов О.Е. Курсоры Открытие курсора OPEN {{[GLOBAL] имя_курсора } |@имя_переменной_курсора} Пример OPEN ClientCurs; OPEN @ClientCursVar;

22.12.2017

Горбунов О.Е.

Курсоры

Открытие курсора
OPEN {{[GLOBAL] имя_курсора } |@имя_переменной_курсора}
Пример
OPEN ClientCurs;
OPEN @ClientCursVar;

Слайд 10

22.12.2017 Горбунов О.Е. Курсоры Выборка данных FETCH [[NEXT | PRIOR |

22.12.2017

Горбунов О.Е.

Курсоры

Выборка данных
FETCH [[NEXT | PRIOR | FIRST | LAST |

ABSOLUTE {номер_строки | @переменная_номера_строки} | RELATIVE {номер_строки | @переменная_номера_строки}]
FROM ]{{[GLOBAL ]имя_курсора }| @имя_переменной_курсора }
[INTO @имя_переменной [,...n]]
Пример
FETCH NEXT FROM ClientCurs INTO @Id, @FirstName;
Слайд 11

22.12.2017 Горбунов О.Е. Курсоры Выборка данных @@FETCH_STATUS – статус курсора 0,

22.12.2017

Горбунов О.Е.

Курсоры

Выборка данных
@@FETCH_STATUS – статус курсора
0, если выборка завершилась успешно;
-1, если выборка завершилась неудачно вследствие

попытки выборки строки, находящейся за пределами курсора ;
-2, если выборка завершилась неудачно вследствие попытки обращения к удаленной или измененной строке.
Пример
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @message=‘Client: '+@Id + ‘ ‘ + @FirstName
FETCH NEXT FROM ClientCurs INTO @Id, @FirstName
END
Слайд 12

22.12.2017 Горбунов О.Е. Курсоры Изменение и удаление данных UPDATE имя_таблицы SET

22.12.2017

Горбунов О.Е.

Курсоры

Изменение и удаление данных
UPDATE имя_таблицы SET {имя_столбца={ DEFAULT | NULL

| выражение}}[,...n] WHERE CURRENT OF {{[GLOBAL] имя_курсора} |@имя_переменной_курсора}
DELETE имя_таблицы WHERE CURRENT OF {{[GLOBAL] имя_курсора} |@имя_переменной_курсора}
Слайд 13

22.12.2017 Горбунов О.Е. Курсоры Закрытие курсора CLOSE {имя_курсора | @имя_переменной_курсора} CLOSE

22.12.2017

Горбунов О.Е.

Курсоры

Закрытие курсора
CLOSE {имя_курсора | @имя_переменной_курсора}
CLOSE ClientCurs;
Освобождение курсора
DEALLOCATE { имя_курсора |@имя_переменной_курсора

}
DEALLOCATE ClientCurs;
Слайд 14

Индексы Команды специфичны для различных СУБД. Создание индекса CREATE [UNIQUE] INDEX

Индексы

Команды специфичны для различных СУБД.
Создание индекса
CREATE [UNIQUE] INDEX <имя> ON <таблица>

(<столбец [DESC] [,…]>)
Назначение – ускорение поиска данных
Удаление индекса
DROP INDEX <имя>
Изменение индекса
ALTER INDEX { <имя> | ALL } ON < таблица > { REBUILD | DISABLE }
В ряде случаев индексы создаются автоматически,
например, при наличии фраз GROUP BY, ORDER BY, при слиянии таблиц и др.

22.12.2017

Горбунов О.Е.

Слайд 15

Разграничение полномочий. DCL Основные понятия: пользователи, объекты, права (привилегии). Предоставление привилегий

Разграничение полномочий. DCL

Основные понятия: пользователи, объекты, права (привилегии).
Предоставление привилегий
GRANT {<привилегия>[,...n] |

ALL PRIVILEGES} ON имя_объекта TO {<идентификатор_пользователя> [,...n]| PUBLIC} [ WITH GRANT OPTION]
<привилегия>::= {SELECT | DELETE | INSERT [(имя_столбца[,...n])] | UPDATE [(имя_столбца[,...n])]} | REFERENCES [(имя_столбца[,...n])] | EXECUTE }
Пример
GRANT SELECT, INSERT, DELETE, UPDATE ON Student TO User1

22.12.2017

Горбунов О.Е.