SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

SQLServerでNullが設定された外部キー

次のチュートリアルでは、SQLServerでSetNullOnDelete制約を使用した外部キ​​ー外部キーについて説明します。

SQLServerの削除時にNULLを設定する外部キーとは何ですか?

外部キーは削除時にNullを設定するようにバインドされます。つまり、親テーブルのレコードが削除されると、外部キー値フィールドの子テーブルの対応するレコードが設定されます。 NULLに。子テーブルに書き込まれたテーブルは、SQLServerから削除されません。

削除時のNULL値がCREATETABLEまたはALTERTABLEステートメントで作成できる場合の外部キー。

CREATETABLEステートメントで削除したときにNULL値を設定する制約付きの外部キーを作成します

構文

  CREATE TABLE bang_con 
(
cot1 kieudulieu [ NULL | NOT NULL ],
cot2 kieudulieu [ NULL | NOT NULL ],


CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)
ON DELETE SET NULL
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);

bang_con

作成する子テーブルの名前。

cot1、cot2

テーブルに作成する列。各列には1つのデータ型があり、NULLまたはNOT NULL値を含めるように指定する必要があります。それ以外の場合、デフォルトはNULLです。

SQLServerのデータ型

fk_ten

作成する外部キー制約の名前。

cot_con1、cot_con2 、。 cot_con_n

bang_conの列は、bang_meの主キーを参照したいと考えています。

bang_me

親テーブルの名前には、bang_conで使用される主キーが含まれています。

cot_me1、cot_me2 、。 cot_me_n

bang_meの主キーを構成する列。外部キーは、データと列cot_con1、cot_con2、の間に制約を作成します。 bang_conのcot_con_n。

ON DELETE SET NULL

親テーブルのデータが削除されると、子テーブルのデータはNULLに設定されます。サブデータは削除されません。

更新中

オプション。親データが更新されたときに子データをどのように処理するかを示します。オプションNOACTION、CASCADE、SET NULL、SETDEFAULTがあります。

アクションなし

ONDELETEまたはONUPDATEで使用します。つまり、親データが削除または更新された場合、子データには何もしません。

CASCADE

ONDELETEまたはONUPDATEで使用します。つまり、親データが削除または更新されると、子データが削除または更新されます。

SET NULL

ONDELETEまたはONUPDATEで使用します。これは、親データが削除または更新されるときに子データがNULLに設定されることを意味します。

デフォルトに設定

ONDELETEまたはONUPDATEで使用します。これは、親データが削除または更新されたときに子データがデフォルト値に設定されることを意味します。

  CREATE TA BLE sanpham 
( id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);

CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);

この例では、情報フィールドid_sanphamを含む主キーを使用して親テーブルsanphamを作成しました。次に、削除制約のある外部キーを持つhangtonkhoという名前の子テーブルがあります。 CREATE TABLEステートメントは、fk_htk_id_sanphamという名前のhangtonkhoテーブルに外部キーを作成します。外部キーは、hangtonkhoテーブルのid_sanpham列とsanphamテーブルのid_sanphamの間の関係を形成します。

この外部キーはON DELETE SET NULLで指定され、親テーブルのデータが次の場合に子テーブルの対応するレコード値をNULLに設定する必要があることをSQLServerに通知します。削除されました。この例では、id_sanphamがテーブルから削除されると、id_sanphamを使用するhangtonkhoテーブルの対応するレコードがNULLに設定されます。

hangtonkhoテーブルのid_sanpham列はNULLに設定されるため、この列がNULL値を受信できるようにする必要があることに注意してください。 CREATEAで作成するときにNOTNULLに設定すると、次のエラーが発生します。

  CREATE TABL E hangtonkho 
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);

Msg 1761, Level 16, State 0, Line 1
Cannot create the foreign key 'fk_htk_id_sanpham' with the SET NULL referential action, because one or more referencing columns are not nullable.

Msg 1750, Level 16, State 0, Line 1
Could thể tạo constraint hoặc chỉ mục. Xem lỗi trước.

以下に示すように、NULL値を取得するようにhangtonkhoテーブルのid_sanpham列を定義してください。

  CREATE TABLE h angtonkho 
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);

Comma nd (s) completed successfully.

制約を使用して外部キーを作成すると、ALTERTABLEステートメントを使用して削除するときにNULL値が設定されます

構文

  ALTER TABLE state_con 
ADD CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, . cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, . cot_me_n)
ON DELETE SET NULL;

bang_con

作成する子テーブルの名前。

fk_ten

作成する外部キー制約の名前。

cot_con1、cot_con2 、。 cot_con_n

bang_conの列は、bang_meの主キーを参照したいと考えています。

bang_me

親テーブルの名前には、bang_conで使用される主キーが含まれています。

cot_me1、cot_me2 、。 cot_me_n

bang_meの主キーを構成する列。外部キーは、データと列cot_con1、cot_con2、の間に制約を作成します。 bang_conのcot_con_n。

ON DELETE SET NULL

親テーブルのデータが削除されたときに子データがNULL値に設定されることを指定します。子テーブルのデータは削除されません。

  ALTER T ABLE hangtonkho 
ADD CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL;

この例では、hangtonkhoサブテーブルは、id_sanphamに基づく親テーブルsanphamを参照して、fk_htk_id_sanphamという名前の外部キーを使用して作成されます。

SQLServerにONDELETESET NULLを指定して、親テーブルのid_sanphamデータが削除されると、hangtonkhoサブテーブルの対応するレコードがNULL値に設定されることを理解します。


  1. ManagementStudioを使用してMSSQLServerを管理する

    SQL Server Management Studioは、インストール時に選択した場合のSQLServerのツールです。このツールは、コマンドラインを使用する代わりに、グラフィカルインターフェイスでSQLServerに接続して管理するのに役立ちます。 リモートSQL Serverインストールに接続するには、このソフトウェアまたは別の同様のソフトウェアも必要です。 Management Studioは、管理者、開発者、テスターに​​よってよく使用されます。 これらは、SQL ServerManagementStudioを開くための一般的な方法です。 方法1: 開く開始すべてのプログラム

  2. MicrosoftSQLServerのデータベースでの基本的な操作

    みなさん、こんにちは。以前の投稿では、SSMS(SQL Server Management Studio)を介してSQLServerへの接続をインストールして確立しました。 この次の記事では、SQL ServerManagementStudioインターフェイスツールを使用したSQLServerのデータベースでの最も基本的な操作について詳しく説明します。では、始めましょう! #first。新しいデータベースを作成する +ステップ1:まず、SQL Server Management Studioを開き、次にSQLServerに接続します。 (1)–アイテムデータベースを右クリックします。 (