[解決済み】外部キーを持つテーブルのカラムはNULLにできる?
2022-03-31 02:44:11
質問
私は他のテーブルへのいくつかのIDカラムを持っているテーブルを持っています。
外部キーで強制的に整合性を確保したい のみ そこにデータを入れたら 後日、そのカラムにデータを入れるために更新を行った場合、制約もチェックされるはずです。
(これはデータベースサーバーに依存すると思われます。私はMySQL & InnoDBテーブルタイプを使っています)
私はこれが妥当な期待値だと考えていますが、間違っていたら訂正してください。
どのように解決するのですか?
はい、値がNULLでないときだけ制約を強制することができます。これは、次の例で簡単にテストできます。
CREATE DATABASE t;
USE t;
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT NULL,
parent_id INT NULL,
FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;
INSERT INTO child (id, parent_id) VALUES (1, NULL);
-- Query OK, 1 row affected (0.01 sec)
INSERT INTO child (id, parent_id) VALUES (2, 1);
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))
にNULLを挿入しているので、最初の挿入は成功します。
parent_id
. 2番目の挿入は、外部キー制約が原因で失敗します。
parent
テーブルを使用します。
関連
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] Varchar は Sum 演算子では無効です。
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?
-
[解決済み] T-SQLを使用して外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み] 外部キー制約のあるテーブルを切り捨てるには?
-
[解決済み] FOREIGN KEY制約を導入すると、サイクルや複数のカスケード・パスが発生する可能性があります - なぜですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】既存テーブルへの外部キー追加
-
[解決済み】外部キー制約。ON UPDATEとON DELETEを使用する場合
-
[解決済み】MySQLが一部の外部キーを削除する件
最新
-
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: 参照されたテーブル "bar" の与えられたキーに一致するユニークな制約がありません。
-
[解決済み】集約関数のないTSQLピボット
-
[解決済み】SQL ServerでIdentityカラムを更新する方法は?
-
[解決済み】INTERSECTとINNER JOINは根本的に違うのか?[重複している]
-
[解決済み】SQL Server: 無効なカラム名
-
[解決済み】SQL Serverは「集約関数やサブクエリを含む式に対して集約関数を実行できない」が、Sybaseはできる。
-
[解決済み] エラー: 名前解析スクリプトで正しい関数に渡された長さのパラメーターが無効です。
-
[解決済み] SQLです。最初の出現箇所のみを返す
-
[解決済み] オペランド型の衝突:uniqueidentifierはintと互換性がない
-
[解決済み] トリガーがコンパイルエラーで作成される