SlideShare a Scribd company logo
1 of 10
Download to read offline
Триггер
• Триггер – это хранимая процедура особого
типа, исполнение которой вызывается
появлением некоторых событий.
• У триггеров нет параметров.
• Триггеры вызываются автоматически
в ответ на события в базе данных.
События 
Возможны	три	типа	событий,	связанных	с	
исполнением	следующих	операторов	SQL	DML:
• INSERT
• UPDATE
• DELETE
Триггер	создается	для	конкретной	
таблицы.
Время исполнения триггера
• BEFORE – до начала наступления события.
• AFTER – после наступления события.
Синтаксис триггеров
CREATE TRIGGER trigger_name
{BEFORE|AFTER}
{INSERT|UPDATE|DELETE}
ON tbl_name
FOR EACH ROW
trigger_body
Тело триггера
•	 Последовательность операторов процедурного
расширения языка SQL.
•	 В теле триггера (в MySQL) запрещено напрямую
ссылаться на имя таблицы триггера.
•	 В теле триггера можно обращаться к таблице
триггера через псевдопеременные 	
NEW и OLD.
NEW и OLD
•	 OLD ссылается на запись в таблице
со старыми значениями.
•	 NEW ссылается на запись в таблице
с новыми значениями.
Пример: триггер
для инициализации записей
в ТEACHER
-- задаем разделитель
DELIMITER $$
-- создаем триггер
CREATE TRIGGER tr_ins_teacher
BEFORE INSERT ON TEACHER
FOR EACH ROW
BEGIN
DECLARE varNextTeacherId INTEGER;
SELECT MAX(TeacherId)+1 INTO varNextTeacherId FROM TEACHER;
SET NEW.TeacherId = varNextTeacherId;
END; $$
-- задаем разделитель
DELIMITER ;
Пример: использование
триггера инициализации
Пример: триггер для аудита
изменений в TEACHER
-- создаем вспомогательную таблицу для аудита
CREATE TABLE LOG (Message VARCHAR(256), MessageDate TIMESTAMP);
DELIMITER $$ -- задаем разделитель
CREATE TRIGGER tr_up_teacher -- создаем триггер
AFTER UPDATE ON TEACHER FOR EACH ROW
BEGIN
IF OLD.TeacherId <> NEW.TeacherId OR OLD.TeacherName <> NEW.TeacherName
OR OLD.Position <> NEW.Position
THEN INSERT INTO LOG(Message) VALUES('Была изменена запись о преподавателе');
INSERT INTO LOG(Message) VALUES(CONCAT_WS(' ','Старые значения полей:',
OLD.TeacherId,OLD.TeacherName ,OLD.Position));
INSERT INTO LOG(Message) VALUES(CONCAT_WS(' ','Новые значения полей: ',
NEW.TeacherId,NEW.TeacherName ,NEW.Position));
END IF;
END; $$
DELIMITER ; -- задаем разделитель
Пример: использование
триггера для аудита

More Related Content

More from Roman Brovko

Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 
C language lect_18_basics
C language lect_18_basicsC language lect_18_basics
C language lect_18_basicsRoman Brovko
 
C language lect_17_basics
C language lect_17_basicsC language lect_17_basics
C language lect_17_basicsRoman Brovko
 
C language lect_16_basics
C language lect_16_basicsC language lect_16_basics
C language lect_16_basicsRoman Brovko
 
C language lect_06_introduction
C language lect_06_introductionC language lect_06_introduction
C language lect_06_introductionRoman Brovko
 
C language lect_09_introduction
C language lect_09_introductionC language lect_09_introduction
C language lect_09_introductionRoman Brovko
 

More from Roman Brovko (20)

Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 
C language lect_18_basics
C language lect_18_basicsC language lect_18_basics
C language lect_18_basics
 
C language lect_17_basics
C language lect_17_basicsC language lect_17_basics
C language lect_17_basics
 
C language lect_16_basics
C language lect_16_basicsC language lect_16_basics
C language lect_16_basics
 
C language lect_06_introduction
C language lect_06_introductionC language lect_06_introduction
C language lect_06_introduction
 
C language lect_09_introduction
C language lect_09_introductionC language lect_09_introduction
C language lect_09_introduction
 

25 - Базы данных. Триггеры