
- •Преимущества и недостатки иерархических моделей
- •7. Сетевая модель данных
- •Целостность сущностей.
- •Целостность ссылок
- •Классификация ограничений целостности по способам реализации
- •Классификация ограничений целостности по времени проверки
- •Классификация ограничений целостности по области действия
- •Реализация декларативных ограничений целостности средствами sql
- •35. Оператор in
- •36. Оператор like
- •38. Агрегирование данных sql-функции
- •44. Объединение
- •47. 46 Вопрос
- •50. Вопрос 49 Обновление с подзапросом
- •Обновление нескольких таблиц
- •51. Создание и уничтожение таблиц
- •54. Обновление представлений. Вопрос 53
- •56. Хранимые процедуры
- •67 Управление параллельным выполнением транзакций
- •Степень детализации блокировок
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