讓我們直指點。我有同時向關係數據庫中插入新行的應用程序。在一個多對一關係的端點上,我想用觸發器跟蹤子行計數以備後用。不幸的是,當新數據包含對同一父行的引用時(applicant
),我得到DEADLOCKS。如何獲得更新行的併發鎖定?這裏是我的觸發器:如何同步某些行的UPDATE的TRIGGER執行?
trademark
DROP TRIGGER IF EXISTS `incrementEntryCountTrigger`; DELIMITER $$ CREATE TRIGGER `incrementEntryCountTrigger` AFTER INSERT ON trademark FOR EACH ROW BEGIN UPDATE applicant SET entryCount=entryCount+1, entryCountChanged=1 WHERE applicant.id=NEW.applicant_id; END$$ DELIMITER ; DROP TRIGGER IF EXISTS `decrementEntryCountTrigger`; DELIMITER $$ CREATE TRIGGER `decrementEntryCountTrigger` AFTER DELETE ON trademark FOR EACH ROW BEGIN UPDATE applicant SET entryCount=entryCount-1, entryCountChanged=1 WHERE applicant.id=OLD.applicant_id; END$$ DELIMITER ;
表
CREATE TABLE `trademark` ( `id` int(11) NOT NULL AUTO_INCREMENT, `applicationDate` datetime DEFAULT NULL, `applicationNumber` varchar(255) DEFAULT NULL, `class` varchar(255) DEFAULT NULL, `creationDate` datetime DEFAULT NULL, `deleted` tinyint(4) DEFAULT NULL, `imageDownloaded` tinyint(4) DEFAULT NULL, `modified` datetime DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `registrationDate` datetime DEFAULT NULL, `registrationNumber` varchar(255) DEFAULT NULL, `trademarkType` varchar(255) DEFAULT NULL, `applicant_id` int(11) DEFAULT NULL, `country_id` int(11) DEFAULT NULL, `service_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniqueApplicationPerServiceContraint` (`applicationNumber`,`service_id`), KEY `FK_sv7x27shne6cro3hch7who6vr` (`applicant_id`), KEY `FK_4fuuxl1srjn7svpby7rd6j1er` (`country_id`), KEY `FK_1g62lp3kjl15f789m7netvlsk` (`service_id`), CONSTRAINT `FK_1g62lp3kjl15f789m7netvlsk` FOREIGN KEY (`service_id`) REFERENCES `service` (`id`), CONSTRAINT `FK_4fuuxl1srjn7svpby7rd6j1er` FOREIGN KEY (`country_id`) REFERENCES `country` (`id`), CONSTRAINT `FK_sv7x27shne6cro3hch7who6vr` FOREIGN KEY (`applicant_id`) REFERENCES `applicant` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2101 DEFAULT CHARSET=utf8
請顯示這兩個表(indexex,外鍵等)的結構 - 運行'SHOW CREATE TABLE tablename'並在此粘貼結果。 – krokodilko