web-dev-qa-db-ja.com

mysqlでカスケードの削除を使用するにはどうすればよいですか?

コンポーネントのデータベースがあります。各コンポーネントは特定のタイプです。つまり、コンポーネントとタイプの間には多対1の関係があります。タイプを削除するとき、そのタイプの外部キーを持つすべてのコンポーネントを削除したいと思います。しかし、私が間違えなければ、カスケード削除はコンポーネントが削除されるときにタイプを削除します。説明したことを行う方法はありますか?

38
Marius

コンポーネントテーブルに含めるものは次のとおりです。

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ストレージエンジンは外部キーをサポートしていません。

54
nickf

外部キー制約を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
)
2
Silambarasan

このSQLを使用

T1からT1、T2を削除するT1.KEY = T2.key WHERE条件でT2を内部結合する

0
md asif rahman