由于触发器导致表锁定问题

时间:2018-07-31 13:32:03

标签: mysql triggers database-deadlocks table-lock

当我使用触发器时,我是触发器的新手,并且在TransactionDateTracking表上遇到一些锁定问题(插入TransactionDateTracking时出现重复输入消息)。下面是表结构

创建表TransactionDateTracking(   Id int(11)NOT NULL AUTO_INCREMENT,   TransactionTrackType varchar(50)NOT NULL,   TransactionTrackDate日期不为空,   LastRunDate日期时间默认为空,   主键(Id),   唯一键TransactionTrackType_UNIQUETransactionTrackType) )ENGINE = InnoDB AUTO_INCREMENT = 645 DEFAULT CHARSET = latin1;

创建表JournalJobLog(   TransformationId int(11)NOT NULL AUTO_INCREMENT,   TransformationName varchar(255)NOT NULL,   LastUpdated时间戳为NULL,默认为NULL,   LastFailureDate时间戳为NULL,默认为NULL,   RevisionNumber bigint(20)默认为空,   主键(TransformationName),   键IDX_JournalJobLogTransformationId) )ENGINE = InnoDB AUTO_INCREMENT = 302 DEFAULT CHARSET = utf8;

以下是我使用的两个触发器- 如果存在JournalJobLogInsert,则触发DROP;

DELIMITER $$

为每行在TransactionDateTracking上插入之后创建触发器JournalJobLogInsert 开始  插入JournalJobLog   SET TransformationName = NEW.TransactionTrackType,      LastUpdated = NEW.TransactionTrackDate; END $$

DELIMITER;

================================================ ================

如果存在JournalJobLogUpdate,则触发DROP;

DELIMITER $$

为每个行在TransactionDateTracking更新后创建触发器JournalJobLogUpdate 开始

INSERT INTO JournalJobLog (TransformationName, LastUpdated) VALUES(NEW.TransactionTrackType, NEW.TransactionTrackDate) ON DUPLICATE KEY UPDATE    
LastUpdated=NEW.TransactionTrackDate;

END $$

DELIMITER;

该问题有时无法在TransactionDateTracking中插入任何说明“重复条目”消息的条目。当我放下触发器时,效果很好。

0 个答案:

没有答案