Главная / Мой вордпресс / Триггеры в mysql

Триггеры в mysql

Триггеры в mysqlДобрый день!
Сегодня поговорим о создании триггеров в мускуле.
И так, погнали наши городских)

Для начала надо разобраться, что же такое триггер и для чего он нужен.
Триггер— набор действий, которые должны быть сделаны в автоматическом режиме при добавлении записи, удалении записи или обновлении записи конкретной таблицы.

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

Первое, что пришло в голову – база данных склада/магазина.
После покупки товара, должны происходить изменения в таблице, которая отвечает за товар.
Логично, что количество товара должно уменьшится на одну единицу.

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

Рассмотри пример, который будет учебный для понимания на практике автоматизации)
Создадим простую базку, в которой будет две таблички.
Одну, из которых мы наполним текстом, а вторая будет отслеживать, какими данными мы наполнили первую табличку.

Как вы поняли, наблюдателем будет триггер)

CREATE DATABASE test;
USE `test`;
DROP TABLE IF EXISTS `content`;

CREATE TABLE `content` (
  `id` int(10) NOT NULL auto_increment,
  `content_infa` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
DROP TABLE IF EXISTS `table2`;

CREATE TABLE `table2` (
  `id` int(10) NOT NULL auto_increment,
  `content_first` text,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

SQL код пояснять не вижу смысла.
И тут наступает момент истины – создаем триггер.

DELIMITER $$
CREATE
    TRIGGER `test`.`insert` AFTER INSERT
    ON `test`.`content`
    FOR EACH ROW BEGIN
    INSERT INTO test.table2
	(id,
	content_first
	)
	VALUES
	(,
	(SELECT content_infa FROM test.content WHERE id=(SELECT MAX(id) FROM test.content))
	);

    END$$
DELIMITER ;

Можно заметить, что триггер вступает в работу после inserta в таблицу content.
Срабатывает триггер для каждой записи.

То, что я только описал можно на интуитивном уровне понять, а дальше еще проще)
Мы insertim во вторую таблицу каждую запись, которую добавили.

Теперь продемонстрирую работу нашей автоматизации)
Для начала наполним парочкой строк первую таблицу

INSERT INTO test.content
	(id,
	content_infa
	)
	VALUES
	(,
	firstline
	),(,secondline),(,thirdline);

И смотрим содержимое второй таблицы.
Получилось!

Если хорошо продумать структуру БД, то наличие триггеров упростит жизнь)
Надеюсь, что понятно всё пояснил.

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*