- •1. Методы распределенной обработки данных
- •1.1. Цели распределенной обработки данных
- •1.3. Архитектура удаленного доступа
- •1.5. Многоуровневые модели. Модель сервера приложений
- •1.6. Физическая модель срод
- •Основные понятия сетевой терминологии
- •2. Распределенные базы данных
- •2.2. Режимы работы с бд
- •2.3. Классификация систем по способам обработки данных
- •2.6. Свойства распределенных баз данных
- •2.7. Функции и архитектура сурбд
- •2.8. Распределенная база данных на примере вуЗа
- •3. Параллельные процессы (или процесс транзакций)
- •3.1. Транзакции
- •Свойства транзакций
- •3.2. Параллелизм операций над бд
- •3.3. Проблемы параллельных процессов
- •3.4. Элементы блокировки.
- •3.5. Расписание транзакций Последовательное исполнение транзакции при использовании блокировок элементов замедляет процесс работы с бд, хотя и работает правильно. Т1: lock a; unlock a;
- •3.6. Модели с блокировками для чтения и записи
- •3.7. Блокировки в Visual FoxPro
- •4. Структурированный язык запросов sql
- •5. Безопасность бд
- •5.3. Целостность данных
- •5.4. Шифрование данных
- •6. Хранилище данных
- •6.1. Концепции хранилища данных
- •6.2. Многомерная модель данных
- •6.4. Интеллектуальный анализ данных
- •7. Базы данных в Интернете
- •7.1. Язык html
- •Гипертекстовые ссылки
- •7.3. Средства взаимодействия.
- •8.1. Архитектура сервера
- •8.2. Табличные пространства и файлы данных
3.7. Блокировки в Visual FoxPro
В Visual FoxPro можно устанавливать блокировки на всю таблицу или на отдельные записи таблицы.
Существуют: 1. Полная блокировка 2. Блокировка изменений
Для установки полной блокировки используется команда
SET EXCLUSIVE ON/OFF
Для установки блокировки изменений таблицы используется функция FLOCK – блокировка таблицы
Разрешается чтение посторонним клиентам LOCK (RLOCK) – блокировка записи
Пример 3.8: SET EXCLUSIVE ON SELECT 0 USE SORT DO WHILE .T. If FLOCK (“SOTR”) * вызов процедуры DO PROC * снимаем блокировку UNLOCK IN SOTR EXIT ELSE @ 10,10, SAY “Устанавливается блокировка, подождите” ENDIF ENDDO
Вопросы
-
Транзакция, это - ?
-
Какие действия совершает транзакция по отношению к БД?
-
Что происходит с системой в случае аварийного завершения транзакции?
-
Какие операторы сигнализируют об успешном и неудачном завершении транзакции?
-
Назовите основные свойства транзакции.
-
Что означает термин параллелизм в среде СУБД?
-
Какие существуют проблемы параллельных процессов?
-
Причина потери результатов обновления элементов БД?
-
Из-за чего возникают “грязные данные”?
-
Какие конфликты возникают при параллельной работе транзакций?
-
Назовите графики запуска транзакций.
-
Какой график транзакций называется сериализуемым?
-
Назовите способы разрешения конкуренций между транзакциями.
-
Проблемы блокировок транзакций?
-
Назовите способы предотвращения «тупиков».
-
Какова формальная модель транзакций?
-
Как осуществляется проверка сериализуемости транзакций?
-
Протокол, гарантирующий сериализуемость?
-
Представьте матрицу совместимости транзакций при использовании блокировок для чтения и записи.
4. Структурированный язык запросов sql
(Structure Query Language)
Первый международный стандарт языка SQL был принят в 1989г. Его назвали SQL/89 или SQL1, стандарт ANSI/ISO. В 1992г. был принят новый международный стандарт SQL/92 или SQL2. В 1999г. появился новый стандарт SQL3. Если SQL1 и SQL2 отличались количественно, то SQL3 отличается качественно. В __ введены новые типы данных, появилась возможность задания сложных структурированных типов данных и т.д. Язык SQL представляет собой наиболее распространенный язык управления базами данных типа клиент/сервер. SQL является языком реляционных баз данных, а не языком системного программирования. SQL - это язык, ориентированный на работу с массивами данных. Надо иметь в виду, что SQL является непроцедурным языком. Таким образом, SQL не включает ни средств управления выполнением программ (ветвлений и циклов), ни средств, для создания форм или отчетов. Однако в некоторые версии SQL, например, в Transact-SQL, используемый в Microsoft SQL Server, добавлены два оператора (IF ELSE и WHILE).
4.1. Основные операторы
Операторы определения данных:
CREATE TABLE – создать таблицу DROP TABLE – удалить таблицу ALTER TABLE изменить таблицу CREATE VIEW – создать представление DROP VIEW– удалить представление
CREATE INDEX– создать индех
DROP INDEX – удалить индех
Операторы манипулирования данными: INSERT – вставить запись DELETE – удалить запись UPDATE – изменить запись SELECT – выбрать запись Язык запросов:
SELECT
Управление транзакцией: COMMIT – удачное завершение транзакции ROLLBACK – откат транзакции SAVE POINT – сохранить контрольную точку
Программный SQL: DECLARE – объявить курсор OPEN – открыть курсор FETCH – передать поля записи в переменные CLOSE – закрыть курсор PREPARE - подготовить EXECUTE - выполнить
4.2. Синтаксис оператора SELECT
SELECT [ALL | DISTINCT] [Alias.] Select_Item [AS Column_Name] [, [Alias.] Select_Item [AS Column_Name] ...] FROM [DatabaseName!]Table [Local_Alias] [, [DatabaseName!]Table [Local_Alias] ...] [[INTO Destination] | [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE JoinCondition [AND JoinCondition ...] [AND | OR FilterCondition [AND | OR FilterCondition ...]]] [GROUP BY GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]] Проще
SELECT [ALL/DISTINCT](<Список полей>/*)
From <Список таблиц>
[WHERE <Предикат>]
[GROUP BY <Список полей результата>]
[HAVING <Предикат-условие для группы>]
[ORDER BY <Список полей, по которым упорядочивают вывод>]
4.3. Примеры запросов на языке SQL
Даны три отношения: Студенты, Дисциплины и Успеваемость с атрибутами NS-номер студента, FIO-ФИО, GR-группа, SPEC-специальность, ND-номер дисциплины, NAMED-наименование дисциплины, OC-оценка
STUD(NS, FIO, GR, SPEC)
DISC(ND, NAMED, GR)
SD(NS, ND, OC)
Простые запросы.
-
SELECT *
FROM STUD
ORDER BY FIO
-
SELECT NS, FIO
FROM STUD
WHERE GR=4305
-
Выборка с использованием оператора AND
SELECT NS, FIO
FROM STUD
WHERE GR=4305 AND FIO=”Иванов”
-
Выборка учебных групп без повторений SELECT DISTINCT GR
FROM DISCP
5. SELECT *
FROM STUD
WHERE FIO LIKE “%ОВ%”
6. Объединение таблиц
SELECT STUD.FIO, STUD.GR, DISC.NAMED
FROM STUD, DISC
WHERE STUD.GR=DISC.GR
7. Выдать дисциплины, которые изучаются в указанных группах
SELECT NAMED
FROM DISC
WHERE GR IN(“4301”,”4506”)
8. Использование оператора BETWEEN
Выдать список студентов с номерами от 101 до 140
SELECT NS, FIO
FROM STUD
WHERE NS BETWEEN 101 AND 140
9. Вложенные запросы
Выдать список студентов имеющих двойки
SELECT DISTINCT FIO, GR
FROM STUD
WHERE NS IN
(SELECT NS
FROM SD
WHERE OC=2)
10. Выдать список студентов, не явившихся на экзамен
SELECT DISTINCT FIO, GR
FROM STUD
WHERE NS IN
(SELECT NS
FROM SD
WHERE OC IS NULL)
11. Выдать список студентов, получивших 5 по Базам данных
SELECT FIO
FROM STUD
WHERE NS IN
(SELECT NS
FROM SD
WHERE OC=5.AND.ND IN
(SELECT ND
FROM DISC
WHERE NAMED=”Базы данных”))
Агрегатные функции
COUNT, SUM, AVG, MIN, MAX
12. Подсчитать количество различных дисциплин
SELECT NAMED, COUNT(*)
FROM DISC
GROUP BY DISC.ND
13. Подсчитать количество студентов, сдавших экзамены по дисциплинам
SELECT NAMED, COUNT(*)
FROM DISC
WHERE ND IN
(SELECT ND
FROM SD
WHERE SD.OC IS NOT NULL
GROUP BY SD.ND)
14. Получить суммарное значение стипендий по группам
SELECT GR, SUM(STIP)
FROM STUD
GROUP BY GR
Операторы манипулирования данными
INSERT-вставить, UPDATE-изменить, DELETE-удалить
INSERT
INTO имя_табл.[<список полей>]
VALUES (<список значений>)
15. INSERT
INTO STUD(NS, FIO, GR)
VALUES(201, “Котов”, 4405)
DELETE
FROM имя_табл.
[WHERE <условие>]
16. DELETE FROM STUD
WHERE FIO=”Котов”
17. Исключить неуспевающих студентов, имеющих по 2 и более двоек
DELETE FROM STUD
WHERE NS IN
(SELECT NS
FROM SD
WHERE OC=2.OR.IS NULL
GROUP BY NS
HAVING COUNT(*)>=2)
UPDATE имя_табл.
SET имя_поля=новое значение
[WHERE условие отбора]
18. UPDATE STUD
SET GR=4407
WHERE GR=4307
Объединение результатов запроса с помощью предложения UNION
Предложение UNION производит слияние результатов первого запроса с результатами второго запроса, неявно удаляя повторяющиеся строки. Запросы должны иметь одинаковое количество столбцов и общий столбец, определенный в каждой таблице.
SELECT поле_1, … , поле_n
FROM таблица_1, …, таблица_n
WHERE предикат
[GROOP BY …]
[HAVING …]
UNION
SELECT поле_1, … , поле_n
FROM таблица_1, …, таблица_n
WHERE предикат
[GROOP BY …]
[HAVING …]
[ORDER BY …]
Пусть имеются два отношения
Книги(ИдКн, Название, Стр, Цена, КолИзд, Серия, ИдАв)
Авторы(ИдАв, Имя)
Где ИдКн, ИдАв – идентификаторы книги и автора, Стр – количество страниц, КолИзд – количество изданий
Произведем запрос на слияние
SELECT ИдАв
FROM Авторы
UNION
SELECT ИдАв
FROM Книги
ORDER BY ИдАв
Строковые функции
Строковые функции предназначены для выполнения различных операций с двоичными данными, символьными строками и арифметическими выражениями. Ниже перечислены некоторые строковые функции, используемые в Transact-SQL.
ASCII (символ) возвращает значение кода ASCII
CHAR (целое_выражение) преобразует код ASCII в символ
LOWER (символьное_выражение) переводит заглавные буквы символьной строки в строчные
UPPER (символьное_выражение) преобразует строчные буквы символьной строки в заглавные
LTRIM удаляет пробелы в начале строки
RTRIM удаляет пробелы в конце строки
CHARINDEX (символьное_выражение, выражение) - возвращает начальную позицию указанного символьного выражения внутри указанной строки. Выражение – это обычно имя столбца.
PATINDEX (‘%подстрока%’, имя_столбца) возвращает начальную позицию первого вхождения подстроки в строке, например, значения в столбце таблицы.
REPLICATE возвращает несколько наборов символов, заданных в первом аргументе функции.
Пример 4.1. SELECT REPLICATE (‘a’,7)
-----------
Результат: Aaaaaaa
REVERS (символьная строка) возвращает символы строки в обратном порядке.
SPACE (n) возвращает строку пробелов из n символов
STUFF(строка_символов_1, начальная_позиция, длина, строка_символов_2) вставляет вторую строку в первую
Пример 4.2. SELECT STUFF(‘123456’, 2, 4, ‘abcdef’)
-----------------
1abcdef6
SUBSTRING(строка_символов, начальная_позиция, длина) используется для возвращения подстроки из исходной строки.
Арифметические функции
Арифметические функции работают с числовыми типами данных. В Transact-SQL существует большое количество математических функций, некоторые из них приведены ниже
COS(), COT(), SIN(), TAN() – тригонометрические функции,
CELLING(числовое_выражение) Наименьшее целое, большее либо равное значению выражения,
FLOOR(числовое_выражение) Наибольшее целое, меньшее либо равное значению выражения,
EXP(), LOG(), LOG10(),
PI() – 3.14159….,
POWER(числовое_выражение, y) Значение выражения в степени y,
ABS(), RAND(), ROUND(), SIGN(), SQRT().
Основы Transact-SQL
(MS SQL Server)
Корпорация Microsoft, как и многие другие производители, разработала свою версию языка SQL, назвав его Transact-SQL. Данный язык удовлетворяет требованиям ANSI SQL-92, но предлагает и еще ряд дополнительных возможностей. В SQL Server появилось новое условное средство – CASE, которое может использоваться в условиях поиска.
CASE
WHEN условие1 THEN результат1
WHEN условие2 THEN результат2
. . .
WHEN условиеn THEN результатn
END
Пример 4.3. Пищевой рацион.
UPDATE Пища (Продукты питания)
SET Норма = CASE
WHEN жир<1
THEN ‘очень мало жиров’
WHEN жир<5
THEN ‘мало жиров’
WHEN жир<20
THEN ‘среднее количество жиров’
WHEN жир<50
THEN ‘высокое количество жиров’
ELSE ‘сплошные жиры’
END
В цифрах указано количество жиров в граммах на 100 грамм.
Оператор CASE проверяет по порядку условие WHEN, пока не встретится первое истинное значение, после чего он игнорирует оставшиеся условия.
Пример 4.4. Запрос о погоде в городе, куда Вы собираетесь ехать, и, соответственно, какую одежду надо взять.
Пусть имеются два отношения:
Г.Города(NГ, Город)
С.Сводка_погоды(NС, NГ, Дата, Температура)
SELECT Г.NГ, Г.Город, Дата, Температура)
«Взять одежду»=
CASE
WHEN С.Температура<0
THEN “Зимняя одежда”
WHEN С.Температура
BETWEEN 0 AND 10
THEN “Весенняя одежда”
WHEN С.Температура<0
BETWEEN 11 AND 30
THEN “Летняя одежда”
ELSE
THEN “Погода неопределенная”
END
FROM Г, С
WHERE Г.NГ=С.NГ
4.4. Встроенный язык SQL.
При включении операторов SQL в базовый язык программирования необходимо чтобы операторы SQL включались непосредственно в текст программы исходного языка программирования.
Во встроенном SQL запросы делятся на два типа:
-
Однострочные запросы,
-
Многострочные запросы
Однострочный запрос во встроенном SQL, вызвал необходимость модификации оператора SQL – SELECT:
SELECT [ALL | DISTINCT] <список полей>
INTO <список переменных базового языка>
FROM <список исходных таблиц>
[WHERE <предикат>]
Пример 4.5. Пусть имеется отношение: STUD (NS, FIO, GR, SPEC)
Для описания локальных переменных в языке Transact SQL (СУБД Ms SQL Server) используется символ @
DECLARE @p1 int,
DECLARE @p2 char(20), @p3 char(4), @p4 char(30)
SET @p1=205
SELECT *
INTO @p2, @p3, @p4
FROM STUD
WHERE NS=@p1 Для реализации многострочных запросов, вводится новое понятие – понятие курсора. Для работы с курсором добавляется несколько новых операторов SQL.
DECLARE <имя курсора> CURSOR – объявление некоторого курсора, с помощью которого можно проводить обработку записей. FOR <подзапрос> OPEN <курсор> - оператор открытия курсора, дает команду СУБД выполнить запрос FETCH <курсор> INTO <список переменных> используется для выборки записей CLOSE <курсор> - оператор закрытия курсора
Пример 4.6. DECLARE q CURSOR FOR SELECT * FROM STUD WHERE SPEC=”230102” OPEN q WHILE .T. FETCH q INTO A, B, C, D, DO PROC END WHILE CLOSE q
Пример 4.7. Пусть имеется БД, связанная с поставками изделий.
Поставщики S(NП, ФИО, Состояние)
Детали P(NД, НазваниеД, Цвет, Вес, Город)
Изделия J(NИ, НазваниеИз, Город)
Поставки SPJ(NП, NД, NИ, Количество)
Необходимо составить программу вывода записей поставщиков в порядке их номеров, при этом за каждой записью поставщика должны непосредственно следовать в порядке номеров изделий все записи изделий, для которых поставляет детали данный поставщик.
MAIN
DEFINE PS.* LIKE S.*
DEFINE PJ.* LIKE J.*
DECLARE CS CURSOR FOR
SELECT NП, ФИО, Состояние, Город
FROM S
ORDER BY NП
DECLARE CJ CURSOR FOR
SELECT NИ, НазваниеИз, Город
FROM J
WHERE NИ IN
(SELECT NИ
FROM SPJ
WHERE NП=S.NП)
ORDER BY NИ
OPEN CS
LET V=”1”B
LET R=”1”B
WHILE V
IF STATUS=NOTFOUND
THEN MESSAGE “NO ROW FOUND”
EXIT WHILE
END IF
FETCH CS INTO PS.NP, PS.ФИО, PS.Состояние, PS.Город
DISPLAY PS.NP, PS.ФИО, PS.Состояние, PS.Город
OPEN CJ
WHILE R
FETCH CJ INTO PJ.NИ, PJ.НазваниеИз, PJ.Город
DISPLAY PJ.NИ, PJ.НазваниеИз, PJ.Город
END WHILE
CLOSE CJ
END WHILE
CLOSE CS
END MAIN
Динамический SQL
Если множество команд, которые может принимать программа, сравнительно невелико (например, бронирование мест на авиалиниях), то и множество возможных предложений SQL, выдаваемых программой, также будет небольшим и может быть зашито в программу.
Если же количество вариантов входных данных будет большим, то зашить их в программу не удается. В этом случае удобно динамически формировать предложения SQL.
Для динамического формирования SQL используются два основных предложения:
PREPARE – подготовить
EXECUTE – выполнить
Схема их использования состоит в следующем:
DEFINE Исходный-SQL CHAR
DECLARE Объектный-SQL оператор
Исходный-SQL=”DELETE FROM SP
WHERE количество<100”
PREPARE Объектный-SQL FROM Исходный-SQL
EXECUTE Объектный-SQL
Вопросы
-
Назовите основные версии языка SQL
-
Операторы манипулирования данными
-
Упрощенный синтаксис оператора SELECT
-
Каков синтаксис оператора INSERT?
-
С какой целью используется оператор UPDATE?
-
Назовите основные агрегатные функции языка SQL
-
Когда возникает необходимость использования курсора.
-
Основные операторы встроенного языка SQL
-
Для чего применяют оператор FETCH – INTO?
-
Когда возникает необходимость динамического SQL?