我有多个具有相同 id (event.id)但不同语言(event.lang)的事件,其中 id 和< strong> lang 形成表事件的复合主键。事件可以由事件表中的多个记录表示(每种语言一个记录)。 n:m 映射表* event_company_map *中的记录定义了公司与事件之间的唯一关系,而不管事件语言如何。
-- events
CREATE TABLE `event` (
`id` INT(10) AUTO_INCREMENT,
`lang` INT(3),
`title` VARCHAR(255),
PRIMARY KEY (`id`, `lang`),
INDEX `lang` (`lang`),
)
-- companies
CREATE TABLE `company` (
`id` INT(10) AUTO_INCREMENT,
`name` VARCHAR(255),
PRIMARY KEY (`id`),
)
-- n:m relation table mapping events and companies
CREATE TABLE `event_company_map` (
`event_id` INT(10),
`company_id` INT(10),
PRIMARY KEY (`event_id`, `company_id`),
FOREIGN KEY (`company_id`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
FOREIGN KEY (`event_id`) REFERENCES `event` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
假设有三个事件,其中event.id = 42,每个事件都有一个唯一的语言ID(event.lang),例如:现在,当我删除一个事件记录(id = '42',lang = 1)时,无论是否还有其他事件的id = ='event_company_map'中的event_id = 42的映射记录都将被删除42左。
我希望只有当id为42的最后一个事件引用被删除时,才会进行级联删除。我怎么能在MySQL中实现呢?
谢谢。