
- •Факультет Кибернетики
- •Москва 2011 оглавление
- •1. Характеристика субд HyTech Типовые функции современной субд
- •Организация данных в таблицах HyTech
- •Структура файлов, реализующих таблицы субд HyTech
- •Организация индексов в субд HyTech
- •Журнальные файлы в субд HyTech
- •Словарь данных
- •1.2 Управление данными в оперативной памяти Управление данными в оп
- •Управление буферизацией данных при выполнении запросов на чтение
- •Управление буферизацией данных при выполнении запросов на запись
- •Управление транзакциями
- •Атомарность транзакции в субд HyTech
- •Непротиворечивость информации в субд HyTech
- •Изолированность транзакций
- •Обеспечение отказоустойчивости субд
- •Механизмы защиты от мягких сбоев
- •Механизмы защиты от жестких сбоев
- •1.5 Поддержка sql и процедурных языков для работы с данными Стандарт sql-89
- •Типы данных в sql HyTech
- •Индексы в субд HyTech
- •Операторы dml (select, insert, update, delete) в субд HyTech
- •Ограничения целостности в субд HyTech
- •Оптимизация запросов в субд HyTech
- •Прочие операторы и свойства
- •Свойства процедурного расширения субд HyTech
- •1.6 Реализация средств сетевого взаимодействия и поддержки распределенных архитектур Средства сетевого взаимодействия и поддержки распределенных архитектур
- •Поддержка сетевых протоколов
- •Работа с другими источниками данных
- •Распределенные вычисления
- •1.7 Разграничение доступа к данным Средства разграничения доступа к данным
- •Базовое управление доступом
- •Аутентификация
- •Управление доступом к данным
- •Временные таблицы
- •Индексы
- •Курсоры
- •Отслеживание изменений данных
- •Механизм снимков
- •Отключение механизма снимков
- •Механизм транзакций
- •Транзакции в HyTech
- •Профиль, роль
- •Генератор
- •Кодификатор
- •Хранимая процедура
- •Триггер
- •Внешний источник данных
- •Встроенные представления
- •Встроенные переменные
- •2.2 Архитектура субд HyTech Структура sql - сервера
- •Особенности организации таблиц в субд HyTech
- •Недостатки организации таблиц в субд HyTech
- •Поиск в таблицах субд HyTech
- •Идентификация записей в таблицах
- •Использование инвертированных списков в субд HyTech
- •Организация хранения данных на диске
- •Структура ядра субд
- •Монитор таблиц
- •Монитор транзакций
- •Решение задачи перевода денег
- •Система поддержки транзакций в субд HyTech
- •Монитор замков
- •Реализация системы захватов
- •Оптимизация запросов
- •3. Sql диалект субд HyTech
- •3.1 Тестовая схема бд Описание тестовой схемы бд
- •Создание тестовой схемы
- •Листинги тестовой схемы
- •3.2 Основные sql операторы манипулирования данными
- •3.2.1 Оператор отбора информации из таблицы select Оператор select
- •Особенности работы с оператором select
- •Примеры работы с оператором select
- •Объединение выборок
- •Конструкция for update
- •Внешнее соединение
- •Работа с кодификаторами
- •3.2.2 Оператор вывода результатов на экран browse resullts Оператор вывода результатов на экран
- •3.2.3 Оператор копирования записей между таблицами insert select Оператор insert select
- •Примеры работы с оператором
- •3.2.4 Оператор добавления записи в таблицу insert values Оператор insert values
- •Пример работы с оператором insert values
- •3.2.5 Оператор модификации записей в таблице update Оператор update
- •Пример работы с оператором update
- •3.2.6 Оператор удаления строк из таблицы delete Оператор delete
- •3.2.7 Оператор выполнения запроса, заданного строкой execute immediate Оператор execute immediate
- •3.2.8 Оператор выгрузки результатов в таблицу results table Оператор results table
- •3.3 Операторы управления транзакциями и снимками
- •3.3.1 Операторы работы со снимками Операторы работы со снимками
- •3.3.2 Операторы работы с транзакциями Механизм транзакций и механизм снимков
- •Оператор начала транзакции begin work
- •Операторы завершения транзакции
- •Примеры работы с операторами завершения транзакции
- •Работа с транзакциями в многопользовательском режиме
- •3.3.3 Блокировки Оператор блокирования таблицы lock
- •Оператор освобождения строк unlock
- •Примеры работы с блокировками
- •3.4 Операторы работы с таблицами и индексами
- •3.4.1 Оператор создания таблицы create table Оператор create table
- •Атрибуты и ограничения столбцов
- •Временные таблицы
- •Другие функции для создания таблиц - функция dsexec
- •Другие функции для создания таблиц - функция copytable
- •Другие функции для создания таблиц - функция htCreateTable
- •Другие функции для создания таблиц - функция imptitle
- •3.4.2 Оператор удаления таблицы drop table Оператор drop table
- •3.4.5 Оператор переноса переменной части таблицы в постоянную pack table Оператор pack table
- •3.4.6 Оператор удаления переменной части таблицы drop diff Оператор drop diff
- •Использование группы атрибутов в качестве индекса
- •Добавление подстроки в качестве индекса таблицы
- •3.4.9 Оператор удаления индекса drop index Оператор drop index
- •Удаление группы или подстроки
- •3.5 Операторы для работы с внешними источниками данных Создание внешнего источника данных
- •Выполнение запросов к внешнему источнику данных
- •Пакетное выполнение запросов к внешнему источнику данных
- •Удаление внешнего источника данных
- •3.6 Операторы для работы с генераторами Операторы create generator, set generator
- •Операторы gen_id, drop generator
- •Использование генератора
- •4. Процедурные расширения sql диалекта субд HyTech
- •4.1 Лексические элементы языка Лексические элементы - зарезервированные слова
- •Зарезервированные слова
- •Лексические элементы - константы Константы
- •Константы целого типа
- •Константы вещественного типа
- •Строковые константы
- •4.2 Переменные Переменные процедурного языка HyTech
- •4.3 Типы данных Типы данных для хранения целочисленных и действительных значений Типы данных float, double, currency
- •Типы данных byte, int, word, number, long, dword
- •Типы данных процедурного языка HyTech.
- •Типы данных для хранения символьных значений, дат и массивов Тип данных date
- •Тип данных char
- •Тип данных array
- •4.4 Линейные операторы Выражения - арифметические операции Выражения
- •Арифметические операции
- •Выражения - операции отношения и присваивания Операции отношения
- •Операция присваивания
- •Выражения - логические операции
- •Составной оператор, пустой оператор Составной оператор
- •Пустой оператор
- •Оператор вывода, оператор завершения работы программы Оператор вывода
- •Оператор завершения работы программы
- •Операторы ветвления Оператор ветвления
- •Оператор цикла с предусловием в формате while
- •Оператор цикла с предусловием в формате for
- •Оператор цикла с постусловием
- •Переход к выполнению очередной итерации цикла
- •4.5 Хранимые процедуры и функции Хранимые процедуры
- •Функции
- •4.6 Триггеры Создание триггера
- •Удаление триггера
- •4.7 Совместное использование sql запросов и процедурных расширений Совместное использование sql-запросов и процедурных расширений
- •Передача переменных в качестве параметра в sql-запрос
- •Сохранение результата запроса в переменной
- •Использование результата запроса Использование результата, сохраненного в переменной, в других запросах
- •Чтение результата запроса
- •Работа с триггерами Использование в триггерах переменных old и new
- •Проверка ошибок триггера
- •4.8 Встроенные sql функции Функции преобразования
- •Функции преобразования
- •Строковые функции
- •Операции с таблицами, выполнение запросов
- •Функции работы с датами и временем
- •Импорт-экспорт
- •Функции для получения информации о таблицах
- •Числовые функции
- •Функции обработки ошибок
- •Интерфейсные и битовые функции Интерфейсные функции
- •Битовые функции
- •Функции отладки Функции отладки
- •Разные функции
- •Функции работы с кодификаторами
- •4.9 Практические приемы и оптимизация sql запросов Навигационное соединение таблиц
- •Использование кодификаторов вместо соединений
- •Уточнение результатов соединения
- •Использование конструкции in вместо соединения
- •Использование группы для связки таблиц по нескольким ключам
- •Получение декартового произведения
- •Использование временных таблиц для промежуточных вычислений
- •Оптимизация группировки и сортировки
- •Различные приемы оптимизации Перенос условий из having в where
- •Уменьшение размера поля, используемого для поиска по маске
- •Перенос изменений в постоянную часть
- •Использование пакетных sql-операций вместо одиночных
- •4.11 Диагностика результатов выполнения sql запросов Работа с функциями обработки ошибок - функции lasthterr, lastsqlerr
- •Функция lasthterr – Получить код последней ошибки HyTech
- •Функция lastsqlerr – Получить код последней ошибки Sql
- •Работа с функциями обработки ошибок - функции sqlermsg, htiomsg Функция sqlermsg – Получить текст сообщения об ошибке sql
- •Функция htiomsg — Получить сообщение об ошибке ввода/вывода
- •Работа с функциями обработки ошибок - функции htabort, htSetError Функция htabort – Завершает (или нет) выполнение sql-скрипта при ошибке в HyTech
- •Функция htSetError – Установить пользовательский код ошибки
- •Коды ошибок sql
- •5. Администрирование субд HyTech Типовые задачи администрирования
- •Инсталляция субд HyTech в Linux
- •Настройка параметров работы сервера
- •Файл инициализации - раздел «Параметры»
- •Файл инициализации - раздел «sql процесс»
- •Файл инициализации - другие разделы файла инициализации
- •Пример файлов инициализации
- •Типовые рекомендации по настройке параметров сервера в файле инициализации
- •5.2 Запуск/останов работы сервера Управление сервером
- •Запуск/останов HyTech sql сервера
- •Настройка стартового файла
- •Мониторинг действий сервера с использованием лог-файла
- •Конфигурирование сервера по результатам мониторинга
- •5.2.1 Запуск/останов работы сервера в режиме сервиса Регистрация и задание параметров сервиса
- •Настройка параметров сервиса в конфигурационном файле
- •Запуск, останов, удаление регистрации сервиса
- •5.2.2 Запуск/останов работы сервера в режиме консольного приложения Администрирование запуска/останова работы сервера в режиме консольного приложения
- •Запуск/останов/пауза сервера
- •Запуск/останов сервера по расписанию
- •Мониторинг действий сервера - мониторинг из окна приложения сервера
- •Мониторинг и управление процессами
- •5.3 Резервное копирование (архивирование) и восстановление бд Резервное копирование и восстановление бд
- •Архивирование базы данных в автономном режиме
- •Архивирование базы данных в оперативном режиме
- •Архивирование таблиц пользователей
- •Архивирование системных таблиц
- •Архивирование файла инициализации
- •Планирование стратегии архивирования базы данных
- •Восстановление базы данных, архивированной в автономном режиме
- •Восстановление базы данных, архивированной в оперативном режиме
- •Восстановление базы данных, архивированной в оперативном режиме - восстановление таблиц
- •Восстановление базы данных, архивированной в оперативном режиме - восстановление системных таблиц
- •5.4 Проверка и исправление таблиц данных и системных таблиц Проверка и исправление таблиц
- •Проверка таблиц
- •Исправление поврежденного журнала
- •Исправление повреждения постоянной части или ассоциатора
- •Проверка целостности системных таблиц и восстановление системных таблиц сервера
- •Примеры пакетной проверки таблиц
- •Конфигурационный файл с именем htctlg.Ini
- •5.5 Конфигурирование субд для использования прокси - сервера Назначение прокси - сервера
- •Установка, запуск и останов прокси-сервера
- •Конфигурирование прокси-сервера
- •5.6 Индексирование и упаковка таблиц, снятие провисшего захвата Индексирование таблицы
- •Упаковка таблицы (перенос журнала в постоянную часть)
- •Снятие провисшего захвата с записи таблицы
- •5.7 Управление безопасностью Управление безопасностью
- •Создание пользователя
- •Изменение/удаление пользователя
- •Аутентификация пользователя при входе в систему
- •Создание профиля безопасности
- •Изменение/удаление профиля безопасности
- •Создание/удаление роли
- •Назначение права пользователю или роли
- •Отмена права пользователю или роли
- •Назначение/отзыв роли пользователю или другой роли
- •Установка/изменение пароля на чтение/запись данных в таблицу
- •Шифрование данных в таблицах
- •Аудит действий пользователя
- •6. Php как инструментальное средство создания web приложений Архитектура web-приложений с использованием php - клиент, http сервер
- •Архитектура web-приложений с использованием php - интерпретатор php, cубд HyTech
- •Установка и настройка сервера Apache и модуля php
- •Установка для Windows
- •Установка для gnu/Linux
- •Типы данных и выражения
- •Тип данных integer (целое число)
- •Тип данных float (число с плавающей точкой)
- •Тип данных boolean (логический)
- •Тип данных строка
- •Создание массива
- •Доступ к элементам массива
- •Операции работы с массивом
- •6.1.2 Управляющие конструкции Условный оператор
- •Оператор «переключатель»
- •Примеры работы с циклами
- •Операторы передачи управления - break
- •Операторы передачи управления - continue
- •Операторы включения - include
- •Операторы включения - require
- •6.2 Пользовательские функции в php, функции работы с массивами и строками
- •6.2.1 Пользовательские функции в php, функции работы с массивами и строками Пользовательские функции
- •Параметры пользовательских функций
- •Параметры пользовательских функций - переменное число параметров
- •Возвращаемое значение
- •Локальные и глобальные переменные
- •Статические переменные
- •6.2.2 Встроенные функции для работы с массивами
- •Функции поиска
- •Примеры функций поиска
- •Функции сортировки
- •Примеры сортировок
- •Итераторы
- •Функции выборки и преобразования массивов
- •Примеры работы с функциями выборки и преобразования массивов
- •6.2.3 Строковые функции и регулярные выражения Строковые функции
- •Примеры использования строковых функций
- •Функции разбора регулярных выражений
- •Примеры использования функций разбора регулярных выражений
- •Шаблоны
- •Шаблоны, продолжение
- •Подшаблоны
- •Модификаторы
- •6.3 Технология использования php при создании Интернет - приложений
- •6.3.1 Технология обработки http-запросов с помощью php Методы доступа
- •Параметры и переменные
- •Html - формы
- •Html - формы, продолжение
- •Более сложная html- форма
- •6.3.2 Сессии Взаимодействие между клиентом и сервером
- •Идентификатор сессии, использование механизма сессии
- •Пример работы с сессиями
- •6.4 Классы и объекты в php
- •6.4.1 Общие сведения о классах и объектах Классы
- •Примеры создания класса
- •Особенности передачи объектов в классы
- •6.4.2 Наследование Пример наследования
- •Уровни доступа
- •Пример с различными уровнями доступа
- •Абстрактные классы и интерфейсы
- •6.4.3 Конструкторы и деструкторы Создание конструктора и деструктора
- •Конструктор в классах-потомках
- •6.4.4 Полиморфизм Перегрузка методов
- •Другие возможности полиморфизма
- •6.4.5 Исключения Исключения
- •Соединение с сервером HyTech, функция hytech_pconnect
- •Отключение от сервера HyTech
- •Функция для смены кодировки символов
- •7.1.2 Функции для выполнения sql-запросов Выполнение sql-запроса и открытие результата запроса
- •Выполнение sql-запроса без открытия результата
- •7.1.3 Функции для работы с результатами sql-запросов Закрытие ранее открытого результата
- •Получение количества полей в результате запроса
- •Пример использования функций
- •Получение значений полей в заданной строке результата
- •Получение строки результата в виде объекта
- •Получение значения поля в заданной строке результата
- •Пример использования функций
- •7.1.4 Функции для работы с типами date и array в HyTech Установка режима работы с датами и массивами
- •Установка формата строки для преобразования даты
- •Преобразование строки в дату (целое число)
- •Преобразование даты(числа) в строку
- •Пример работы с функциями преобразования
- •7.1.5 Функции для пакетного ввода данных Пакетное добавление строк в таблицу
- •Открытие таблицы
- •Добавление строки в буфер пакетного ввода
- •Сохранение в таблице строк из буфера пакетного ввода
- •Пример работы с пакетным вводом информации
- •7.1.6 Функции для диагностики ошибок Диагностика ошибок
- •7.2 Комплексный пример работы приложения с использованием php и субд HyTech Описание сценария взаимодействия с пользователем
- •Форма регистрации
- •Скрипт формы регистрации
- •Функции для работы с бд
- •Страница для выбора таблицы
- •Регистрация переменной "table"
- •Выбор строк из таблицы
- •Форма редактирования
- •Сохранение информации
- •Результат успешного добавления строки
Функции
Оператор function объявляет подпрограмму (функцию). В отличие от оператора create procedure оператор function только описывает функцию, а не создаёт её как объект базы данных. Объявление функции может располагаться только внутри тела хранимой процедуры или триггера. Объявление функции должно быть до первого её использования. Вложенные объявления функции не допускаются.
Внутри функции могут быть объявлены переменные. Их имена не должны совпадать с именами параметров функции. Все переменные, которые будут объявлены внутри функции, будут доступны только внутри этой функции. Имена объявляемых переменных могут совпадать с глобальными переменными, в этом случае глобальные переменные не будут доступны из функции.
Все функции должны возвращать некоторое значение. Возвращаемое значение задаётся оператором return. Если возвращаемое значение не указано или оператор return не встретился при выполнении функции, то функция возвращает число 0. Вызывающая функция вправе проигнорировать возвращаемое значение.
Формат:
function Имя_функции ( [ Параметр , ...] ) { Тело_функции; }
Аргументы:
Аргумент |
Значение |
Имя_функции |
Задает имя функции. Имя функции должно содержать буквы и цифры, должно начинаться с буквы и должно быть не длиннее 31 символа. Имена процедур должны быть уникальными внутри процедуры (внутри триггера) и не должны совпадать с зарезервированными словами. |
Параметры |
Необязательная конструкция, которая задает имена параметров и тип вызова. Все параметры должны иметь уникальные имена. Конструкция inout используется для выходных параметров и задает вызов по ссылке. Конструкция inout эквивалентна конструкции out и также задает вызов по ссылке. Максимальное количество параметров функции – 31. |
Тело_функции |
Тело функции описывает те действия, которые необходимо выполнить при вызове функции. |
Пример:
// вывести на консоль содержимое массива // с указанием номера элемента
create procedure scOutlist() as { var @i, @arr[5]; @arr[0] = '5'; @arr[1] = '4'; @arr[2] = '3'; @arr[3] = '2'; @arr[4] = '1';
// вывод на консоль
function Out(s, n) { ? char(n + 1) + ' -> ' + s; }
for(@i = 0; @i < 5; @i = @i + 1 ) { Out( char(arr[@i]), @i); } }
4.6 Триггеры Создание триггера
SQL оператор create trigger создает новый триггер, который сохраняется на сервере. Оператор create trigger состоит из заголовка, который задает характеристики триггера, и тела, которое содержит описание тех действий, которые надо выполнить при срабатывании триггера.
Формат:
create trigger Имя_триггера on Имя_таблицы { after | before } { insert | update | delete } [ position Позиция ] [ user { current | default } ] [ for each { row | statement } ] as [ Определение_локальных_переменных... ] begin {Тело_триггера;} end;
Определение_локальных_переменных ::= declare variable Имя_переменной [ = Выражение ] , ... ;
Аргументы:
Аргумент |
Значение |
Имя_триггера |
Задает имя триггера. Имя триггера должно содержать буквы и цифры, должно начинаться с буквы и должно быть не длиннее 31 символа. Имена триггеров должны быть уникальными и не должны совпадать с зарезервированными словами. |
Тело триггера |
Тело триггера описывает те действия, которые необходимо выполнить при вызове триггера. |
user current |
Необязательный параметр, который задает права, которые будут использоваться внутри триггера. Если задана конструкция user current, то внутри триггера действуют права пользователя, который создал триггер. |
user default |
Необязательный параметр, который задает права, которые будут использоваться внутри триггера. Если задана конструкция user default, то внутри триггера будут действовать права, действовавшие до вызова триггера. |
after |
Обязательный параметр, который задает момент срабатывания триггера. Если задана конструкция after, то триггер срабатывает после выполнения операции. |
before |
Обязательный параметр, который задает момент срабатывания триггера. Если задана конструкция before, то триггер срабатывает до выполнения операции и может ее отменить. |
for each row |
Необязательный параметр, который определяет момент срабатывания триггера. Если задана конструкция for each row, то триггер срабатывает для каждой обрабатываемой записи. |
for each statement |
Необязательный параметр, который определяет момент срабатывания триггера. Если задана конструкция for each statement, то триггер срабатывает один раз. |
position число |
Необязательный параметр, который определяет порядок срабатывания триггеров. Число должно быть в диапазоне от 0 до 32767. Чем меньше позиция триггера, тем раньше он сработает. Триггеры с одинаковой позицией срабатывают в произвольном порядке. Если позиция триггера не задана, то у него будет позиция 0. |
Определение_локальных_переменных |
См. подробнее в разделе «Переменные». |
Пример:
Создать триггер tadBOOK, который будет протоколировать удаляемые из таблицы BOOK записи.
create trigger tadBOOK on BOOK after delete for each row as begin insert into table LOG (DATE , USER , RID) values (today (), session_user, BOOK.ID) ; end;