MySQL ON DELETE CASCADE

概要:このチュートリアルでは、MySQL ON DELETE CASCADE referential action for foreign key を使用して複数の関連テーブルからデータを削除する方法を学びます。

前のチュートリアルで、単一の DELETE 文を使って複数の関連テーブルからデータを削除する方法を学びました。 しかし、MySQL は、親テーブルからデータを削除するときに子テーブルから自動的にデータを削除できる、外部キーの ON DELETE CASCADE 参照アクションと呼ばれるより効果的な方法を提供します。 このデータベースモデルでは、各建物は1つまたは複数の部屋を持っています。 しかし、各部屋は1つの建物にしか属さない。

buildingsrooms テーブルの関係は、次のデータベース図に示すように 1 対多 (1:N) です。

buildings テーブルから 1 行削除すると、rooms テーブルで buildings テーブル内の行を参照しているすべての行も削除したくなります。 例えば、ビルディングNo.の行を削除する場合、buildingsテーブルの行を参照しているroomsテーブルの行もすべて削除します。

Code language: SQL (Structured Query Language) (sql)

あなたはまた、建物番号2を参照しているroomsテーブルの行も削除されます。

以下は、ON DELETE CASCADE参照アクションの動作を示す手順です。 buildings テーブルを作成します:

Code language: SQL (Structured Query Language) (sql)

Step 2. roomsテーブルを作成します:

Code language: SQL (Structured Query Language) (sql)

外部キー制約定義の最後にON DELETE CASCADE句があることに注意してください.

手順3. buildings テーブルに行を挿入します。

Code language: SQL (Structured Query Language) (sql)

Step 4. buildingsテーブルからデータを問い合わせます:

Code language: SQL (Structured Query Language) (sql)

buildingsテーブルに2行あります.

Step 5……….buildingsテーブルからデータを問い合わせます:

Code language: SQL (Structured Query Language) (sql)

テーブルの中にある行の数を確認します。 roomsテーブルに行を挿入します:

Code language: SQL (Structured Query Language) (sql)

Step 6. roomsテーブルからデータを問い合わせます:

Code language: SQL (Structured Query Language) (sql)

我々は、建物NO 1に属する3部屋と建物NO 2に属する2部屋を持っています.

ステップ7. 建物no.のある建物を削除します。 2:

Code language: SQL (Structured Query Language) (sql)

Step 8. rooms テーブルからデータを取得します:

Code language: SQL (Structured Query Language) (sql)

ご覧のように、building_no 2を参照しているすべての行が自動的に削除されました。 そのため、MySQL の ON DELETE CASCADE 参照アクションを使用する予定のテーブルには、適切なストレージ エンジンを選択する必要があります。

Tips to find tables affected by MySQL ON DELETE CASCADE action

Sometimes, which table is affected by the ON DELETE CASCADE referential action when you delete data from a table are useful to know. このデータは、information_schema データベースの referential_constraints から次のように照会できます:

Code language: SQL (Structured Query Language) (sql)

たとえば、classicmodels データベースで CASCADE 削除ルールを持つ buildings テーブルに関連付けられたテーブルを見つけるには、次のクエリを使用します:

Code language: SQL (Structured Query Language) (sql)

コメントを残す

メールアドレスが公開されることはありません。