[解決済み] SQL ON DELETE CASCADE、削除はどちらで行われますか?
2022-04-27 13:33:48
質問
データベース内に2つのリレーションがある場合、以下のようになります。
CREATE TABLE Courses (
CourseID int NOT NULL PRIMARY KEY,
Course VARCHAR(63) NOT NULL UNIQUE,
Code CHAR(4) NOT NULL UNIQUE
);
CREATE TABLE BookCourses (
EntryID int NOT NULL PRIMARY KEY,
BookID int NOT NULL,
Course CHAR(4) NOT NULL,
CourseNum CHAR(3) NOT NULL,
CourseSec CHAR(1) NOT NULL
);
で、この2つの間に外部キー関係を確立します。
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
そうすると
Course
属性で
BookCourses
リレーションは
Code
属性は
Courses
リレーションを使用します。
質問は、2つのリレーションのどちらかで削除が発生した場合、削除はどちらにカスケードするのでしょうか?のタプルを削除した場合
Courses
リレーションで参照するすべてのタプルを削除するのでしょうか?
BookCourses
それともその逆ですか?
どのように解決するのですか?
テーブル上の何かを削除すると、カスケードが動作します。
Courses
. テーブル上の任意のレコード
BookCourses
テーブルを参照している
Courses
は自動的に削除されます。
しかし、テーブルを削除しようとすると
BookCourses
はテーブル自体にのみ影響し
Courses
follow-up question: なぜ、あなたは
CourseID
のテーブルのCategoryにある?
スキーマをこのように再構築した方がいいかもしれませんね。
CREATE TABLE Categories
(
Code CHAR(4) NOT NULL PRIMARY KEY,
CategoryName VARCHAR(63) NOT NULL UNIQUE
);
CREATE TABLE Courses
(
CourseID INT NOT NULL PRIMARY KEY,
BookID INT NOT NULL,
CatCode CHAR(4) NOT NULL,
CourseNum CHAR(3) NOT NULL,
CourseSec CHAR(1) NOT NULL,
);
ALTER TABLE Courses
ADD FOREIGN KEY (CatCode)
REFERENCES Categories(Code)
ON DELETE CASCADE;
関連
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] PostgreSQLからのPL/pgSQL出力をCSVファイルに保存する
-
[解決済み] SQL Serverでレコードを削除した後、IDシードをリセットする。
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
-
[解決済み】外部キー制約。ON UPDATEとON DELETEを使用する場合
-
[解決済み] ALTER TABLE文に'ON DELETE CASCADE'を追加する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ERROR 1136 (21S01) を解決してください。列の数が Mysql の行 1 の値の数と一致しません。
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] 1つのPostgreSQLクエリで複数のWITHステートメントを使用するには?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] NOT IN vs NOT EXISTS
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?