э.ғ.д.,
профессор Орынбеков А.O.,
математика магистрі, аға оқытушы Бурлибаева
Ш.М., студент Сулайманова А.
ТРИГГЕР
Триггер – кестеге орналастыратн ереже, сонымен қатар DELETE, UPDATE немесе
INSERT іске қосылған кезде қосымша әрекеттер орындалады.
Мысалы, журналда өзгерістерді енгізуге болады. Бірақ екі бөлек
сұраныс орнына (біреуі- деректерді өзгертуге, екіншісі- журналға
жазбаларды енгізуге), «Қашан болмасын жол өзгергенде, жасалынған
өзгерістер туралы хабарлау үшін басқа кестеде жаңа жол құру»
ережені қамтитін триггерді енгізуге болады. Мұндай әрекеттер
негізгі сұраныста кейбір артықшылық жасайды, бірақ жалпы
өнімділікті арттыруға ықпал
етеді.
MySQL-ге триггерлер 5.0.2 версиясынан бастап енгізілген. Триггердің синтаксисі
басқаша. Процедура мен басқа функциялар үшін MySQL ANSI SQL:2003
стандарт қолданылады.
Триггерлер процедура ретінде DELETE, UPDATE немесе INSERT оқиғалар
кезде орындалады. Олар оқиғалар анықталмай немесе анықталған
соң орындалу мүмкін. Осылайша INSERT алдында және INSERT – тен
кейін триггерді анықтауға болады. Бұл INSERT – ке дейін бір триггер
орындалу, ал INSERT – тен кейін басқа триггер орындалу мүмкін. Триггер
өте күшті құрал болатынын білдіреді.
Триггер-
шын мәнінде, сақталатын процедура, бірақ нақты кесте мазмұның
өзгеру оқиғасына байланысты. Триггердің мақсаты- берілген
кестедегі жазбалардың өзгеруін, сонымен қатар жазбалардың
енгізуін немесе олардың жойылғаның анықтау. Жоғарыда
айтылғандардан мынадай қорытынды жасауға болады: мысалы, триггерлерді
кестемен әр түрлі әрекеттер жасауда қолдануға болады.
Триггерді құру
CREATE TRIGGER trigger_name
ON table_name trigger_time trigger_event FOR EACH ROW trigger_stmt -
бұл сұраныс жалпы түрде триггер құруға қолданылады.
trigger_time – бұның орнына кілтті сөздердің біреуі
көрсетіледі:
BEFORE – кестеге өзгерістер енгізілмей триггер орындалады;
AFTER - кестеге өзгерістер енгізіліп триггер орындалады;
trigger_event - триггер қандай оқиға қандай әрекеттер жасау тиістігін көрсетеді, әрекеттер төмендегідей болу мүмкін:
INSERT - триггер жаңа жазба
қосылу оқиғасымен байланысты;
UPDATE – жаңа жазба жаңарту оқиғасымен байланысты;
DELETE - жазба жою оқиғасымен байланысты;
trigger_stmt – триггердің тұлғасы болып табылады. Триггер тұлғасы
ішіндегі бірнеше оператор орындалу үшін BEGIN-END блок ішіне қою
керек.
Мысалы:
FirstName бір өріс
орналасқан table1 кесте бар. Дата және
уақыт типті ValueCh, DateChange өрістер орналасқан
тағы да бір LogsName кестені құрастырамыз. Бұл
кестеге триггер енгізілген өзгерістерді жазады.
Сұраныс
құрастырайық:
DELIMITER //
CREATE TRIGGER myTrigger BEFORE
INSERT ON `table1`
FOR EACH ROW
BEGIN
INSERT INTO `LogsName` (`ValueCh`,
`DateChange`) VALUES (NEW.`FirstName`, NOW())
;
END
//
Басында // бөлгіш ретінде
анықтайық. Триггер тұлғасында логтар
үшін кестеге енгізу сұранысын көрсетеміз. ValueCh өріс
үшін жазбалар енгізілінеді, бұл table1 кестенің FirstName өрісінен
NEW кілтті сөз арқасында, ол енгізілмей тұрып, жеткен болатын
жаңа мән, сонымен қатар DataChange өріске ағымды
дата мен уақыт енгізілінеді.
Сонымен, table1 кестеге жазба
қалай енгізілетіне қарамастан триггер логтар кестесіне
енгізілінетін мән мен енгізу датасы туралы ақпаратты жазады.
Кесте
жаңартуға триггер құру мысалы:
DELIMITER //
CREATE TRIGGER myTrigger1
BEFORE UPDATE ON `table1`
FOR EACH ROW
BEGIN
INSERT INTO `LogsName`
(`ValueCh`, `DateChange`) VALUES (CONCAT(NEW.`FirstName`,'-', OLD.`FirstName`),
, NOW()) ;
END
//
Триггер тұлғасында OLD кілтті сөз тағы
қолданылады. Логтар кестенің ValueCh өрісіне өзгертілетін
өріс үшін жаңа мән мен ескі мән біріккен
түрінде ақпарат енгізілінеді.
Жойылған жазбаларды жазу үшін жоюға триггер
құрылады. Оның жазылуы ұқсас.
Триггер жоюға
келесі сұраныс құрылады:
DROP TRIGGER myTrigger1
ПАЙДАЛАНҒАН ӘДЕБИЕТТЕР
1.
Конноли Т., Бегг К. Базы данных: проектирование, реализация, сопровождение.
Теория и практика. 3-е изд. М.: Вильямс, 2008
2.
Виктор Гольцман. MySQL 5.0. Библиотека программиста. СПб.: Питер.-253б
3.
http://www.mysql.com MySQL Databases