Проблема блокировки таблиц из-за триггеров

Я новичок в триггерах и сталкиваюсь с некоторой проблемой блокировки таблицы 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 с сообщением "Дублирующая запись". Когда я опускаю триггеры, все работает нормально.

0 ответов

Другие вопросы по тегам