新しいプロジェクトでテーブルリレーションの使用を開始したい。
いくつかのグーグルの後、InnoDBとして2つのテーブルをセットアップしました。
リンクしたいキーは
-> users-> userid(プライマリ)-> sessions-> userid(インデックス)
このプロセスで理解できないのは、「更新時」と「削除時」の異なる設定が何をするかだけです
オプションは次のとおりです。
基本的に、セッションマネージャーによって有効期限が検出された場合にのみセッションが削除されるため、ユーザーが完全に削除されたときにセッションのデータを削除する必要があります...
だから、これらのオプションが何をするのかを誰かが私に教えてくれるなら、それは大歓迎です。
CASCADE
は、親が変更されたときに変更を伝播します。 (行を削除すると、その行を参照する制約されたテーブルの行も削除されます。)
SET NULL
は、親行がなくなると列の値をNULLに設定します。
RESTRICT
により、親行のDELETEの試行が失敗します。
編集:あなたはそれらについて尋ねなかったが、SQL標準は2つの他のアクションを定義している:SET DEFAULT
およびNO ACTION
。 MySQLでは、NO ACTION
はRESTRICT
と同等です。 (一部のDBMSでは、NO ACTION
は遅延チェックですが、MySQLではすべてのチェックが即時に実行されます。)MySQLパーサーはSET DEFAULT
が、InnoDBとNDBエンジンの両方がこれらのステートメントを拒否するため、SET DEFAULT
は、実際にはON UPDATE
またはON DELETE
制約。
また、カスケード外部キーアクションはMySQLでトリガーをアクティブ化しないことに注意してください。
外部キーを含むテーブルはreferencingまたはchild tableと呼ばれ、候補キーを含むテーブルはreferencedまたはparent tableと呼ばれます。
Set NULL:列の値を[〜#〜] null [〜#〜]に設定します親テーブルの行。
[〜#〜] cascade [〜#〜]:CASCADEは親の変更時に伝播します行を削除すると、その行を参照する制約付きテーブルの行も削除されますなど。
[〜#〜] restrict [〜#〜]:RESTRICTは、指定されたparent rowを削除できない親行の値を参照するchild rowが存在する場合。
NO ACTION:NO ACTIONとRESTRICTはよく似ています。参照されたテーブルでUPDATEまたはDELETEステートメントが実行されると、DBMSはステートメント実行の最後でnoneのreferential関係がviolated。短い子行では、親行deleteまたはupdateであれば問題ありません。