[解決済み] PostgreSQLの場合。外部キー/削除時のカスケード
2022-03-06 03:48:18
質問
このような2つのテーブルがあります。
DROP TABLE IF EXISTS schemas.book;
DROP TABLE IF EXISTS schemas.category;
DROP SCHEMA IF EXISTS schemas;
CREATE SCHEMA schemas;
CREATE TABLE schemas.category (
id BIGSERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
UNIQUE(name)
);
CREATE TABLE schemas.book (
id BIGSERIAL PRIMARY KEY,
published DATE NOT NULL,
category_id BIGINT NOT NULL REFERENCES schemas.category ON DELETE CASCADE ON UPDATE CASCADE,
author VARCHAR NOT NULL,
name VARCHAR NOT NULL,
UNIQUE(published, author, name),
FOREIGN KEY(category_id) REFERENCES schemas.category (id)
);
ロジックは単純で、ユーザーがカテゴリxの下の本をすべて削除した後、xは猫から削除されます。私は上記の方法を試してみましたが、うまくいきません。
解決方法は?
カスケード削除のある外部キーとは、親テーブルのレコードが削除されると、子テーブルの対応するレコードも自動的に削除されることを意味します。これをカスケード削除といいます。
子テーブルから削除すると、親テーブルからも削除されるということではないのですね。
UPDATE 1:
on delete cascade オプションは、親テーブルで対応する行が削除されたときに子テーブルでも行を削除するかどうかを指定するものです。カスケード削除を指定しなかった場合、データベースサーバーのデフォルトの動作では、他のテーブルがそのテーブルを参照している場合は、そのテーブルのデータを削除することができません。
このオプションを指定すると、後で親テーブルの行を削除するときに、データベースサーバーは子テーブルのその行に関連するすべての行 (外部キー) も削除するようになります。カスケード削除の主な利点は、削除操作を実行するために必要な SQL 文の量を減らすことができることです。
つまり、子テーブルからではなく、親テーブルから行を削除した場合にどうなるかということです。
つまり、あなたのケースでは、ユーザーがCATsテーブルからエントリを削除すると、booksテーブルから行が削除されることになります。)
お役に立てれば幸いです :)
関連
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み】2つの列を分割する方法は?
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] どのバージョンのPostgreSQLを使用していますか?
-
[解決済み] PostgreSQLからのPL/pgSQL出力をCSVファイルに保存する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
-
[解決済み】Mac OS XでPostgreSQLサーバーを起動するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] varchar 値 'simple, ' をデータ型 int に変換する際に変換に失敗しました。
-
[解決済み] Varchar は Sum 演算子では無効です。
-
[解決済み] SQL Server サブクエリが 1 つ以上の値を返しました。これは、サブクエリが =, !=, <, <= , >, >= のように続く場合は許可されません。
-
[解決済み] mongoの外部キー?
-
[解決済み] DELETE文の競合REFERENCE制約
-
[解決済み] リンクされたサーバーの NULL に対して OLE DB プロバイダー Microsoft.Jet.OLEDB.4.0 のインスタンスを作成できません。
-
[解決済み] SQLクエリで2つの列から値を引き算する
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] PostgreSQL - json 型の等値演算子を識別できませんでした。
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)