Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PZ.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
347.14 Кб
Скачать

3.4 Триггеры

Триггер – это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.

Триггер, обеспечивающий ссылочную целостность таблиц категорий и велосипедов.

Словесное описание:

При удалении категории должны быть удалены все велосипеды этой категории.

SQL аналог:

DELIMITER //

CREATE TRIGGER `delete_category` BEFORE DELETE ON `category`

FOR EACH ROW BEGIN

DELETE FROM bicycle WHERE category_id = OLD.id;

END//

DELIMITER ;

Триггер, увеличивающий рейтинг клиента после каждого заключенного акта на сумму этого акта.

Словесное описание:

При добавлении акта в таблицу обновлять запись клиента, который фигурирует в акте, увеличив его рейтинг на указанную в акте сумму.

SQL аналог:

DELIMITER //

CREATE TRIGGER `add_act` AFTER INSERT ON `act`

FOR EACH ROW BEGIN

UPDATE

client

SET

rating = rating + NEW.cost

WHERE

id = NEW.client_id;

END//

DELIMITER ;

Триггер, изменяющий связь клиент-скидка при изменении рейтинга клиента.

Словесное описание:

При изменении клиента искать какой наибольший рейтинг соответствует клиенту и изменять его идентификатор в записи клиента.

SQL аналог:

DELIMITER //

CREATE TRIGGER `update_discount` BEFORE UPDATE ON `client`

FOR EACH ROW begin

SELECT

id INTO @discount_id

FROM

client_discount

WHERE

rating = (

SELECT

MAX(rating)

FROM

client_discount AS cd

WHERE

cd.rating <= NEW.rating

);

SET NEW.discount_id = IFNULL(@discount_id, NEW.discount_id);

end//DELIMITER ;

3.5 Резервное копирование и восстановление базы данных

Резервное копирование в MySQL очень просто. Достаточно выполнить следующую команду:

mysqldump -uLOGIN -pPASS DBNAME > dump.txt

LOGIN – это логин пользователя базы данных

PASS – его пароль

DBNAME – имя базы данных

dump.txt – путь к создаваемой резервной копии

mysqldump создает резервную копию в виде текстового файла со всеми запросами, необходимыми для восстановления базы. Чтобы импортировать созданный дамп обратно достаточно просто выполнить все запросы из файла резервной копии, например так:

mysql -uLOGIN -pPASS DBNAME < dump.txt

Для автоматизации процесса создания резервных копий я воспользовался встроенным планировщиком задач – cron. Выполним команду

crontab –e

И напишем следующее правило:

0 0 * * * mysqldump -uLOGIN -pPASS DBNAME

| gzip -c > `date "+%Y-%m-%d"`.gz

Эта команда, запускаясь из cron в полночь (00:00) каждых суток, делает дамп базы DBNAME и архивирует его архиватором gzip в файл-архив с именем, соответствующим текущей дате.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]