最后匹配引用上的CASCADE DELETE(复合主键上的外键)

时间:2014-01-27 16:20:36

标签: mysql sql database foreign-keys composite-key

我有多个具有相同 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中实现呢?

谢谢。

0 个答案:

没有答案