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

50. Вопрос 49 Обновление с подзапросом

UPDATE Поставки

SET Цена = 0, К_во = 0

WHERE ПС IN

(SELECT ПС

FROM Поставщики

WHERE Город IN ('Паневежис', 'Резекне'));

Обновление нескольких таблиц

UPDATE Поставки UPDATE Наличие

SET ПР = 20 SET ПР = 20

WHERE ПР = 13; WHERE ПР = 13;

в единственным запросе невозможно обновить более одной таблицы, а так как код продукта входит в четыре таблицы, то пришлось выдать четыре сходных запроса. Это может привести к противоречию базы данных (нарушению целостности по ссылкам),

51. Создание и уничтожение таблиц

CREATE TABLE базовая_таблица (столбец тип_данных [NOT NULL]

[,столбец тип_данных [NOT NULL]] ...);

[, первичный ключ]

[ , внешний ключ и его характеристики];

CREATE TABLE STUDENT (SNUM SMALLINT NOT NULL UNIQUE,

NAME CHAR(20) NOT NULL,

FNAME CHAR(20),

DOB DATE,

SGROUP CHAR, …

PRIMARY KEY(SNUM),

FOREIGN KEY (SGROUP)

REFERENCE GROUP); - желательно по столбцу группы

Если первичный ключ составной - PRIMARY KEY(SNUM, LNAME),

DROP TABLE имя_таблицы - удаляет описание таблицы и её данные

52. Модификация данных в таблице

ALTER TABLE имя_таблицы

2 режима: add, modify

modify – изменение свойств таблицы

ALTER TABLE STUDENT MODIFY (FNAME CHAR(50));

ADD – добавление нового атрибута

ALTER TABLE STUDENT ADD (PASP CHAR(50));

Удаление столбцов

ALTER TABLE STUDENT DROP COLUMN AVM;

53.Представления

Представление – виртуальная таблица формир. в результате выполнения запроса из одной или нескольких реально сущес. таблиц в БД. Формируется в момент представления данных.

Решают задачи:

1. обеспечивают независимости польз. программ от изменения лог структуры БД при её расширение или изменения размещения столбцов, возникают при норм. таблиц.

2.предоставляют возможности различным пользователям по разному видеть одни и те же данные, в одно и тоже время

3. сокрытие от опред. пользователи некоторых данных, невидимых через предложение им представление.

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

[(столбец[,столбец] ...)]

AS подзапрос

[WITH CHECK OPTION];

где подзапрос, следующий за AS и являющийся определением данного представления, не исполняется, а просто сохраняется в каталоге;

необязательная фраза "WITH CHECK OPTION" (с проверкой) указывает, что для операций INSERT и UPDATE над этим пред-ставлением должна осуществляться проверка, обеспечивающая удовлетворение WHERE фразы подзапроса;

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

а) хотя бы один из столбцов подзапроса не имеет имени (создается с помощью выражения, SQL-функции или константы); б) два или более столбцов подзапроса имеют одно и то же имя;

если же список отсутствует, то представление наследует имена столбцов из подзапроса.

CREATE VIEW Мясные_блюда

AS SELECT БЛ, Блюдо, В, Выход

FROM Блюда

WHERE Основа = 'Мясо';

DROP VIEW представление; - удалить представление

54. Обновление представлений. Вопрос 53

о представлениях, не все из которых являются обновляемыми.

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

INSERT DELETE UPDATE

Таким образом, некоторые представления по своей природе обновляемы, в то время как другие таковыми не являются. Дело заключается не просто в том, что некоторая СУБД не способна поддерживать определенные обновления, в то время как другие СУБД могут это делать., означает здесь "без помощи какого-либо человека - пользователя".

к теоретически обновляемым представ-лениям относятся представления-подмножества строк и столбцов. Однако существуют некоторые представления, которые не являются представлениями-подмножествами строк и столбцов, но также теоретически обновляемы. Хотя известно, что такие есть и можно привести их примеры, но невозможно дать их формального определения. Поэтому пользователь должен сам оценивать возможность использования операций DELETE, INSERT или UPDATE в созданном им представлении.

55. Триггеры

Это процедурный код, который автоматич. выполняется СУБД при наступление события манипулирования данными.

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

Необходимо помнить, что

1. триггер всегда инициал. до или после выбора, вставки или удаления строки данных.

2. всегда ассоциирован с табл. БД

3. с каждой табл. БД м.б. связан с 1 или более триггеров

4. триггер выполняется как часть транзакции, которая его минимизировала

Это один из ключевых элементов при работе с БД:

1. установка ограничений которые не были сделаны на этапе проектирования и реализации

2. расширяют фукц. возможности, позволяя автоматизировать ответственные операции и выдавая надлеж. предположения и советы для выполнения соттв. характеристических действий.

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

4. триггеры расширяют возможности субд в целом

CREATE TRIGGER SET QUANT ON STUDENT FOR - будет запускаться при добавление записи

DECLARE @ SSTUD INT;

DECLARE @SGR CHAR(4); - объявление переменных в триггере который может принимать значение в SET (SET @STUD=) или SELECT)

SELECT @SGR=SGROUP FROM INSERTED;

INSERTED/ DELETED – логич. виртуальная таблица БД, структура которой соответствует структуре таблице, для которой определён триггер и которая содержит старое или новое значение строки кот. м.б. изменена в результате действий пользователя.

SELECT @SSTUD =COUNT(SNUM) FROM STUDENT

WHERE SGROUP=SGR;

UPDATE SGROUP SET QUANT=SSTUD

WHERE SGROUP=@SGR;

данный триггер будет выполняться когда добавляется новая запись в таблицу STUDENT

CREATE TRIGGER ins_prot

ON k_protokol FOR INSERT

AS

DECLARE @s_new NUMERIC(9,2),

@kolvo NUMERIC(6),

@bill_num NUMERIC(6)

SELECT @kolvo=kolvo FROM Inserted

IF @kolvo>0

BEGIN

SELECT @s_new=p.price_sum, @bill_num=bill_num

FROM k_price p, Inserted i

WHERE p.price_num=i.price_num

IF @s_new !=0

UPDATE k_bill

SET bill_sum=bill_sum+@s_new*@kolvo

WHERE k_bill.bill_num=@bill_num

END

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]