MySQL ON DELETE CASCADE
概要:このチュートリアルでは、MySQL ON DELETE CASCADE
referential action for foreign key を使用して複数の関連テーブルからデータを削除する方法を学びます。
前のチュートリアルで、単一の DELETE
文を使って複数の関連テーブルからデータを削除する方法を学びました。 しかし、MySQL は、親テーブルからデータを削除するときに子テーブルから自動的にデータを削除できる、外部キーの ON DELETE CASCADE
参照アクションと呼ばれるより効果的な方法を提供します。 このデータベースモデルでは、各建物は1つまたは複数の部屋を持っています。 しかし、各部屋は1つの建物にしか属さない。
buildings
と rooms
テーブルの関係は、次のデータベース図に示すように 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)
。