MySQL のデフォルトの ON DELETE 動作は何ですか?
質問
私は MySQL を解析しようとしています。 ドキュメント . 彼らはより明確であるべきです。彼らが言っているのは、5つの可能性があるということです。SET NULL、NO ACTION、RESTRICT、CASCADE、およびSET DEFAULTです。
NO ACTIONとRESTRICTは同じこと(FKを破壊するDB変更を防ぐ)を行い、そのことがデフォルトであるため、ON DELETE句を省略すると、NO ACTION(またはRESTRICT -- 同じこと)を言うことになります。
SET NULLは親の行の削除を許可し、FKをNULLに設定します。
CASCADEは子行を削除します。
SET DEFAULTは決して使用すべきではありません。
これは多かれ少なかれ正しいのでしょうか?
どのように解決するのですか?
はい、その通りです。
アクションなし : [...] InnoDB は、親テーブルの削除または更新操作を拒否します。 を拒否します。
制限する : 親テーブルの削除または更新操作を拒否します。 操作を拒否します。 RESTRICT (またはNO ACTION) を指定することは ON DELETE 節または ON UPDATE 節を省略したのと同じです。 ON UPDATE句を省略したのと同じです。[...]
どうやら
NO ACTION
であり
RESTRICT
は同義語です。さらに、これらは
ON DELETE / UPDATE
節がない場合は常に使用されるため、これがデフォルトの動作となります。
SET NULL : 親テーブルから行を削除または更新し、外部キーカラムを設定する。 子テーブルの外部キー・カラムをNULLに設定する。 子テーブルの外部キーカラムをNULLに設定します。[...]
外部カラムは、NOT NULLとして宣言されていない(または、InnoDBが削除または更新を許可しない)場合、NULLに設定されます。
CASCADE : 親テーブルから行を削除または更新し、自動的に 子テーブルの一致する行を自動的に削除または更新する。 子テーブルの一致する行を削除または更新します。 [...]
カスケードでは、外部カラムを削除(または更新)します。
SET DEFAULT : このアクションはパーサによって認識されます。 パーサによって認識されますが、InnoDB は、ON DELETE を含むテーブル定義を拒否します。 を含むテーブル定義は拒否されます。 SET DEFAULT または ON UPDATE SET DEFAULT 節を含むテーブル定義を拒否します。 節を含むテーブル定義を拒否します。
ですから、基本的にそのオプションは使用できません。
関連
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLのNULLについて解説した記事
-
MySql認証ベースのvsftpd仮想ユーザー
-
[解決済み] ユニークなテーブル/エイリアスではない
-
MySQLの一般的な分割ライブラリおよび分割テーブルスキームの概要
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] MySQLでJoinを使った削除
-
[解決済み] MySQLのDESCRIBE [table]に相当するSQLiteはありますか?
-
[解決済み】MySQLのDatetimeカラムにデフォルト値を設定する方法とは?
-
[解決済み】外部キー制約。ON UPDATEとON DELETEを使用する場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLにおけるorder byの使用方法の詳細
-
MySQLで正規表現を使う 詳細
-
MySQL XAが分散型トランザクションを実装する方法を1記事にまとめました。
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
[解決済み] Ubuntu linux上で動作するリモートMySQLサーバーを再起動する方法は?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?