Как использовать каскад удаления в MySQL? - PullRequest
38 голосов
/ 04 февраля 2009

У меня есть база компонентов. Каждый компонент имеет определенный тип. Это означает, что между компонентом и типом существует отношение многие-к-одному. Когда я удаляю тип, я хотел бы удалить все компоненты, которые имеют внешний ключ этого типа. Но если я не ошибаюсь, каскадное удаление удалит тип при удалении компонента. Есть ли способ сделать то, что я описал?

Ответы [ 3 ]

54 голосов
/ 04 февраля 2009

Вот что вы включили бы в таблицу компонентов.

CREATE TABLE `components` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `typeId` int(10) unsigned NOT NULL,
    `moreInfo` VARCHAR(32), 
    -- etc
    PRIMARY KEY (`id`),
    KEY `type` (`typeId`)
    CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`)
      REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)

Просто помните, что вам нужно использовать механизм хранения InnoDB: стандартный механизм хранения MyISAM не поддерживает внешние ключи.

2 голосов
/ 04 апреля 2016

Вы должны определить ограничения внешнего ключа как ON DELETE CASCADE.

Примечание: Вам необходимо использовать механизм хранения InnoDB, он по умолчанию механизм хранения MyISAM не поддерживает отношение внешних ключей.

CREATE TABLE `table2` (
`id` int(11) NOT NULL auto_increment,
`name` int(11) NOT NULL,

PRIMARY KEY (`id`),
KEY `ids` (`ids`)
CONSTRAINT `foreign` FOREIGN KEY (`ids`)
  REFERENCES `table2` (`ids`) ON DELETE CASCADE ON UPDATE CASCADE
)
0 голосов
/ 25 июля 2016

используйте этот sql

УДАЛИТЬ T1, T2 ОТ Т1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ T2 ON T1.key = T2.key ГДЕ состояние

...