- •Работа с сервером MySql при помощи терминального клиента mysql.Exe
- •Введение
- •Подсоединение к серверу и отсоединение от него
- •Создание пользователейMySqLи назначение прав доступа
- •Использованиеmysqlв пакетном режиме
- •Выполнение запросов
- •Создание и выбор базы данных
- •Работа с таблицами Типы данных столбцов
- •Просмотр существующих таблиц
- •Создание таблицы
- •Просмотр структуры таблицы
- •Модификация структуры таблицы
- •Переименование таблицы
- •Добавление данных в таблицу
- •Обновление (модификация) данных в таблице
- •Удаление строк в таблице
- •Удаление таблицы
- •Определение ключей в бд Определение первичных ключей
- •Определение внешних ключей
- •Задание на лабораторную работу
- •Содержание отчета
- •Работа с сервером MySql при помощи клиента dbForge Studio for MySql
- •Введение
- •Создание соединения и подключение к серверу бд
- •Создание и редактирование таблиц
- •Определение внешних ключей
- •Просмотр и редактирование данных
- •Построение диаграммы бд
- •Экспорт схемы и данных
- •Экспорт схемы и данных вDbForge Studio for MySql версии 4.5
- •Задание на лабораторную работу
- •Содержание отчета
- •Разработка хранимых процедур и функций на сервереMySql
- •Введение
- •Создание, запуск и удаление простой процедуры
- •Создание, запуск и удаление простой функции
- •Простые и системные переменные
- •Параметры процедур и функций
- •Операторы управления ходом выполнения программы
- •Курсоры
- •Задание на лабораторную работу
- •Содержание отчета
- •Исключения и триггеры
- •Исключения
- •ОператорSignal
- •Триггеры
- •Задание на лабораторную работу
- •Содержание отчета
- •Технологии программного доступа к данным
- •КомпонентыActiveX Data Objects
- •Создание главной формы приложения для работы с бд. Соединение с базой данных
- •Создание простой формы с использованием компонентаDataGrid(форма «Детали»)
- •Использование компонентовDbEdit, иDbLookupComboBox. Программный доступ к свойствам и методам компонентаAdoDataSet(форма «Поставщики»)
- •Реализация поиска и фильтрации в базе. Программный доступ к элементам набора данных (форма «Проекты)
- •Сортировка строк в компонентеDbGrid
- •Создание форм с выбором режима просмотра или редактирования. Работа с датой и временем (форма «Поставки»)
- •Работа с изображениями в бд
- •Имитация выпадающего списка в ячейке dbGrid
- •Вызов хранимой процедуры
- •Создание отчетов
- •Задание на лабораторную работу
- •Издания и публикации
- •Разработкаweb-приложений дляMySqLна языкеPhp
- •Установка и настройкаDenver
- •Соединение с бд и вывод данных
- •Задание на лабораторную работу
ОператорSignal
Оператор SIGNALпозволяет вызвать пользовательское исключение и сообщить обработчику или внешней программе информацию о произошедшей ошибке. Синтаксист оператораSIGNAL:
SIGNAL<идентификатор_исключения>
[SET<параметр> = <значение>, [<параметр> = <значение>]...]
Здесь параметр <идентификатор_исключения> может представлять собой значение SQLSTATEили имя исключения, которое было задано при его создании оператором DECLARE ...CONDITION. ЗначениеSQLSTATEне должно начинаться с цифр ‘00’. Для пользовательского исключения следует использовать значениеSQLSTATE45000.
Оператор SIGNALможет включать опциюSET, после которой следуют пары <параметр>=<значение>, разделенные запятыми.
Пример:
CREATE PROCEDURE p (val INT)
BEGIN
DECLARE my_error CONDITION FOR SQLSTATE ‘45000’;
DECLARE EXIT HANDLER FOR my_error SELECT(‘Произошла ошибка!’);
IF val = 0 THEN
SIGNAL my_error;
END IF;
END;
Пример с использованием параметра MESSAGE_TEXT:
CREATE PROCEDURE p (val INT)
BEGIN
DECLARE my_error CONDITION FOR SQLSTATE ‘45000’;
IF val = 0 THEN
SIGNAL my_error SET MESSAGE_TEXT = ‘Произошла ошибка!’;
END IF;
END;
Триггеры
Триггеры - это особые хранимые процедуры, выполняемые в ответ на происходящие в базе данных события. Они относятся к числу наиболее важных элементов промышленных приложений базы данных. Основным назначением триггеров является поддержка ограничений целостности, которые не реализуются при помощи внешних ключей и ограничений, накладываемых на значение столбца (NOT NULL, CHEK и т.д.).
Триггеры уровня инструкций языка манипулирования данными (триггеры DML) запускаются после вставки, обновления или удаления строки конкретной таблицы. Это наиболее распространенный тип триггеров, особенно часто применяемый разработчиками.
Триггер BEFORE.Вызывается до внесения каких-либо изменений, в том числе до вставки записи (BEFORE INSERT).
Триггер AFTER.Выполняется после того, как производятся все изменения, в частности после операции вставки записи (AFTER INSERT).
Существуют, также, следующие виды триггеров:
Триггер уровня инструкции.Выполняется для отдельной SQL-инструкции, которая может обрабатывать одну или более записей базы данных.
Триггер уровня записи.Вызывается для отдельной записи, обрабатываемой SQL-инструкцией. Если, предположим, таблица books содержит 1000 строк, то следующая инструкция UPDATE модифицирует все эти строки: UPDATE books SET title = UPPER (title);И если для данной таблицы определен триггер уровня записи, он будет запущен 1000 раз.
Псевдозапись NEW. Структура данных с именем NEW, которая так же выглядит и обладает такими же свойствами, как и запись таблицы. Эта псевдозапись доступна только внутри триггеров обновления и вставки; она содержит значения модифицированной записи после внесения изменений.
Псевдозапись OLD. Структура данных с именем OLD, которая так же выглядит и обладает такими же свойствами, как и запись таблицы. Эта псевдозапись Доступна только внутри триггеров обновления и удаления; она содержит значения модифицируемой записи до внесения изменений.
Синтаксис оператора создания триггера:
CREATETRIGGER<имя_триггера> {BEFORE|AFTER} <событие_БД>
ON <имя_таблицы> FOR EACH ROW
BEGIN
<операторы>
END
<событие_БД>- определение типа DML-инструкции, с которой связывается триггер: INSERT, UPDATE или DELETE. У каждой таблицы для каждого события может существовать только один триггер.
Триггер, осуществляющий проверку веса детали при добавлении ее в таблицу Parts(вес не должен превышать заданного значения)
CREATE TRIGGER Check_Weight BEFORE INSERT ON Parts FOR EACH ROW
BEGIN
DECLARE Wrong_weight CONDITION FOR SQLSTATE ‘45000’;
IF NEW.Weight > 1000 THEN
SIGNAL Wrong_weight SET MESSAGE_TEXT = ‘Вес детали превышает 1000!’;
END IF;
END
Триггер, осуществляющий проверку на совпадение наименований деталей:
CREATE TRIGGER Check_Part_Name BEFORE INSERT ON Parts FOR EACH ROW
BEGIN
DECLARE Duplicate_part_name CONDITION FOR SQLSTATE ‘45000’;
DECLARE N INTEGER;
SELECT COUNT(*) INTO N FROM Parts WHERE Part_name=NEW. Part_name;
IF N > 0 THEN
SIGNAL Duplicate_part_name SET MESSAGE_TEXT = ‘Такая деталь уже есть в базе!’;
END IF;
END
Триггер, который удаляет все детали, наименование которых совпадает с удаляемой деталью (не будет работать):
CREATE TRIGGER Delete_the_same_parts AFTER DELETE ON Parts FOR EACH ROW
BEGIN
DELETE FROM Parts WHERE Part_name=OLD.Part_name;
END
http://doc.prototypes.ru/database/mysql/triggers/info/