【问题标题】:How to synchronize TRIGGER execution for UPDATE of certain row?如何为特定行的 UPDATE 同步 TRIGGER 执行?
【发布时间】:2013-08-23 10:35:36
【问题描述】:
让我们直奔主题。我有同时将新行插入关系数据库的应用程序。在一个多对一关系的端点上,我想使用触发器跟踪子行计数以供以后使用。不幸的是,如果新数据包含对同一父行的引用 (applicant),我会遇到死锁。如何获取更新行的并发锁?这是我的触发器:
删除触发器如果存在`incrementEntryCountTrigger`;
分隔符 $$
在每行插入商标后创建触发器`incrementEntryCountTrigger`
开始
更新申请人
SET entryCount=entryCount+1,
entryCountChanged=1
WHERE申请人.id=NEW.applicant_id;
结束$$
分隔符;
如果存在 `decrementEntryCountTrigger`,则删除触发器;
分隔符 $$
删除每一行的商标后创建触发器`decrementEntryCountTrigger`
开始
更新申请人
SET entryCount=entryCount-1,
entryCountChanged=1
WHERE申请人.id=OLD.applicant_id;
结束$$
分隔符;
trademark 表的结构
创建表`商标`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`applicationDate` 日期时间 DEFAULT NULL,
`applicationNumber` varchar(255) 默认为空,
`class` varchar(255) 默认为空,
`creationDate` 日期时间 DEFAULT NULL,
`deleted` tinyint(4) 默认为空,
`imageDownloaded` tinyint(4) 默认为空,
`modified` datetime 默认为 NULL,
`name` varchar(255) 默认为空,
`registrationDate` 日期时间 DEFAULT NULL,
`registrationNumber` varchar(255) 默认为空,
`trademarkType` varchar(255) 默认为空,
`applicant_id` int(11) 默认为空,
`country_id` int(11) 默认为空,
`service_id` int(11) 默认为 NULL,
主键(`id`),
唯一键`uniqueApplicationPerServiceContraint`(`applicationNumber`,`service_id`),
KEY `FK_sv7x27shne6cro3hch7who6vr`(`applicant_id`),
KEY `FK_4fuuxl1srjn7svpby7rd6j1er`(`country_id`),
KEY `FK_1g62lp3kjl15f789m7netvlsk` (`service_id`),
约束 `FK_1g62lp3kjl15f789m7netvlsk` 外键 (`service_id`) 参考 `service` (`id`),
约束`FK_4fuuxl1srjn7svpby7rd6j1er`外键(`country_id`)参考`country`(`id`),
约束 `FK_sv7x27shne6cro3hch7who6vr` 外键 (`applicant_id`) 参考 `applicant` (`id`)
) 引擎=InnoDB AUTO_INCREMENT=2101 默认字符集=utf8
【问题讨论】:
-
请显示这两个表的结构(索引、外键等) - 运行 SHOW CREATE TABLE tablename 并在此处粘贴结果。
标签:
mysql
triggers