
- •Факультет Кибернетики
- •Москва 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"
- •Выбор строк из таблицы
- •Форма редактирования
- •Сохранение информации
- •Результат успешного добавления строки
Более сложная html- форма
Приведем пример более сложной формы, с разными типами элементов ввода:
<form action="ex6.php" method="POST"> <table border="0"> <tr> <td>Фамилия:</td> <td><input type="text" name="fio[]"></td> </tr> <tr> <td>Имя:</td> <td><input type="text" name="fio[]"></td> </tr> <tr> <td>Отчество:</td> <td><input type="text" name="fio[]"></td> </tr> <tr> <td valign="top">Ваш пол:</td> <td> <input type="radio" name="sex" value="1">Мужской<br /> <input type="radio" name="sex" value="2">Женский<br /> </td> </tr> <tr> <td>Изучаю PHP:</td> <td><input type="checkbox" name="learn"></td> </tr> <tr> <td colspan="2" align="right"> <input type="submit" value="Ok"> <input type="reset" value="Отмена"> </td> </tr> </table> </form>
В данной форме, по сравнению, с предыдущей есть еще поле ввода «Ваш пол:» (тип поля «радио-кнопка» – предполагается выбор из возможных альтернатив, в качестве имени для радио-кнопки задано одно и то же имя переменной sex, понятно, что она может иметь только одно значение). Также в форму добавлено поле «Изучаю PHP» (тип поля «флаг», т.е. значение может быть либо true, либо false).
Пример скрипта обработки ex6.php:
<?php $arr = $_REQUEST[ "fio" ]; echo "Фамилия: $arr[0]<br />"; echo "Имя: $arr[1]<br />"; echo "Отчество: $arr[2]<br />"; if( $_REQUEST[ "sex" ] == 1 ) { echo "Пол: мужской<br />"; } elseif ( $_REQUEST[ "sex" ] == 2 ) { echo "Пол: женский<br />"; } else { echo "Пол: не указан<br />"; } echo "<br />"; if( $_REQUEST[ "learn" ] ) { echo "Ура! Изучает PHP<br />"; } ?>
6.3.2 Сессии Взаимодействие между клиентом и сервером
Протокол HTTP реализует взаимодействие между клиентом и сервером по принципу «запрос-ответ», однако для работы реальных приложений этого недостаточно. В ряде случаев HTTP-сервер должен сохранять информацию о клиенте, чтобы использовать ее при следующих запросах. Таким образом, HTTP-сервер должен уметь идентифицировать конкретного клиента. Примеры, когда это может потребоваться:
Авторизация доступа;
Сложный пользовательский интерфейс (когда есть зависимости между формами ввода).
Для решения этой задачи PHP предлагает механизм сессий.
Сессия – это временной период, в течение которого конкретный пользователь взаимодействует с HTTP-сервером. Сессия начинается с момента первого запроса клиента и завершается:
При явном указании на то клиента (например, нажали кнопку «Завершить работу»);
При закрытии клиентского приложения (браузера);
При длительном отсутствии активности клиента (истечение таймаута, в течение которого от клиента не было ни одного запроса).
В PHP пользовательская сессия идентифицируется путем присвоения ей уникального 32-байтного идентификатора (SID, Session IDentifier), например: af65756756fghgfuyiu890tyi0iu7780.
SID передается на сервер с каждым запросом клиента и возвращается клиенту с ответом сервера.
Механизм сессий в PHP позволяет определить конкретную сессию и сохранять переменные, связанные с данной сессией, в течение всего периода работы клиента в рамках данной сессии.
Переменные сессий хранятся в файлах на сервере. В файле настроек PHP – php.ini должен быть задан параметр session.save_path, в котором указывается, в каком каталоге будут храниться файлы с переменными сессий. Для каждой сессии создается свой файл. Может так оказаться, что файлов сессий в процессе работы создано очень много, что может повлиять на производительность сервера (требуется искать файлы в большом каталоге). Этого можно избежать, указав в параметре session.save_path перед именем каталога, целое число и символ ;. Это целое число будет определять глубину вложенности подкаталогов, создаваемых для хранения файлов с переменными сессий.
Примеры:
;без подкаталогов session.save_path = /var/www/sessions ;с подкаталогами, уровень вложенности 2 session.save_path = 2;/var/www/sessions