Проблема блокировки таблиц из-за триггеров
Я новичок в триггерах и сталкиваюсь с некоторой проблемой блокировки таблицы TransactionDateTracking (дублирующее сообщение при вставке в TransactionDateTracking)), когда я использовал триггеры. Ниже приведены структуры таблиц.
СОЗДАТЬ СТОЛ TransactionDateTracking
(Id
int (11) NOT NULL AUTO_INCREMENT, TransactionTrackType
varchar (50) NOT NULL, TransactionTrackDate
дата НЕ NULL, LastRunDate
datetime DEFAULT NULL, ПЕРВИЧНЫЙ КЛЮЧ (Id
), УНИКАЛЬНЫЙ КЛЮЧ TransactionTrackType_UNIQUE
(TransactionTrackType
)) ENGINE = InnoDB AUTO_INCREMENT = 645 CHARSET ПО УМОЛЧАНИЮ =latin1;
СОЗДАТЬ СТОЛ JournalJobLog
(TransformationId
int (11) NOT NULL AUTO_INCREMENT, TransformationName
varchar (255) НЕ NULL, LastUpdated
временная метка NULL DEFAULT NULL, LastFailureDate
временная метка NULL DEFAULT NULL, RevisionNumber
bigint (20) DEFAULT NULL, ПЕРВИЧНЫЙ КЛЮЧ (TransformationName
), КЛЮЧ IDX_JournalJobLog
(TransformationId
)) ENGINE = InnoDB AUTO_INCREMENT = 302 CHARSET DEFAULT=utf8;
Ниже приведены два триггера, которые я использовал - DROP TRIGGER IF EXISTS JournalJobLogInsert;
РАЗДЕЛИТЕЛЬ $$
CREATE TRIGGER JournalJobLogInsert ПОСЛЕ ВСТАВКИ НА TransactionDateTracking
ДЛЯ КАЖДОЙ СТРОКИ НАЧИНАЙТЕ ВСТАВИТЬ В JournalJobLog
SET TransformationName=NEW.TransactionTrackType,
LastUpdated=NEW.TransactionTrackDate;
END$$
РАЗДЕЛИТЕЛЬ;
================================================== =============
DROP TRIGGER ЕСЛИ СУЩЕСТВУЕТ JournalJobLogUpdate;
РАЗДЕЛИТЕЛЬ $$
СОЗДАТЬ ТРИГГЕР JournalJobLogUpdate ПОСЛЕ ОБНОВЛЕНИЯ ВКЛ TransactionDateTracking
ДЛЯ КАЖДОГО РЯДА НАЧИНАЮТСЯ
INSERT INTO JournalJobLog (TransformationName, LastUpdated) VALUES(NEW.TransactionTrackType, NEW.TransactionTrackDate) ON DUPLICATE KEY UPDATE
LastUpdated=NEW.TransactionTrackDate;
END $$
РАЗДЕЛИТЕЛЬ;
Проблема заключается в том, что я не могу вставить какую-либо запись в TransactionDateTracking с сообщением "Дублирующая запись". Когда я опускаю триггеры, все работает нормально.