43

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

4

4 に答える 4

58

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

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

于 2009-02-04T13:37:48.727 に答える
4

このSQLを使用してください

DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key WHERE 条件

于 2016-07-25T08:14:29.583 に答える
2

外部キー制約を 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
)
于 2016-04-04T09:30:57.947 に答える
0
Step 1. Create the buildings table:

CREATE TABLE buildings (
  building_no INT PRIMARY KEY AUTO_INCREMENT,
  building_name VARCHAR(255) NOT NULL,
  address VARCHAR(255) NOT NULL
);

Step 2. Create the rooms table:

CREATE TABLE rooms (
  room_no INT PRIMARY KEY AUTO_INCREMENT,
  room_name VARCHAR(255) NOT NULL,
  building_no INT NOT NULL,
  FOREIGN KEY (building_no)
    REFERENCES buildings (building_no)
    ON DELETE CASCADE
);

Notice that the ON DELETE CASCADE  clause at the end of the foreign key constraint 
definition.
于 2020-10-28T04:02:27.517 に答える