Computer >> 컴퓨터 >  >> 프로그램 작성 >> SQL Server

SQL Server에서 Null로 설정된 외래 키

다음 자습서에서는 SQL Server에서 Set Null On Delete 제약 조건이 있는 외래 키 외래 키에 대해 설명합니다.

SQL Server에서 삭제 시 Set NULL이 있는 외래 키는 무엇입니까?

외래 키는 삭제 시 Null을 설정하도록 바인딩됩니다. 즉, 상위 테이블의 레코드가 삭제되면 외래 키 값 필드의 하위 테이블에 있는 해당 레코드가 설정됩니다. NULL로. 자식 테이블에 작성된 테이블은 SQL Server에서 삭제되지 않습니다.

삭제 시 NULL 값을 CREATE TABLE 또는 ALTER TABLE 문으로 생성할 수 있는 외래 키 제공

CREATE TABLE 문으로 삭제할 때 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 } ]
);

뱅_콘

생성하려는 하위 테이블의 이름입니다.

cot1, cot2

테이블에 생성하려는 열입니다. 각 열에는 1개의 데이터 유형이 있으며 NULL 또는 NOT NULL 값을 포함하도록 지정해야 합니다. 그렇지 않으면 기본값은 NULL입니다.

SQL Server의 데이터 유형

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, . cot_con_n in bang_con.

ON DELETE SET NULL

부모 테이블의 데이터가 삭제되면 자식 테이블의 데이터는 NULL로 설정됩니다. 하위 데이터는 삭제되지 않습니다.

업데이트 중

옵션. 상위 데이터가 업데이트될 때 하위 데이터로 수행할 작업을 나타냅니다. NO ACTION, CASCADE, SET NULL 및 SET DEFAULT 옵션이 있습니다.

조치 없음

ON DELETE 또는 ON UPDATE와 함께 사용합니다. 즉, 상위 데이터가 삭제되거나 업데이트될 때 하위 데이터에 아무 작업도 수행하지 않습니다.

캐스케이드

ON DELETE 또는 ON UPDATE와 함께 사용합니다. 즉, 상위 데이터가 삭제되거나 업데이트될 때 하위 데이터가 삭제되거나 업데이트됩니다.

SET NULL

ON DELETE 또는 ON UPDATE와 함께 사용합니다. 즉, 상위 데이터가 삭제되거나 업데이트될 때 하위 데이터가 NULL로 설정됨을 의미합니다.

기본 설정

ON DELETE 또는 ON UPDATE와 함께 사용합니다. 즉, 상위 데이터가 삭제되거나 업데이트될 때 하위 데이터가 기본값으로 설정됩니다.

예:

  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로 설정해야 함을 SQL Server에 알립니다. 삭제되었습니다. 이 예에서 id_sanpham이 테이블에서 삭제되면 id_sanpham을 사용하는 hangtonkho 테이블의 해당 레코드는 NULL로 설정됩니다.

hangtonkho 테이블의 id_sanpham 열은 NULL로 설정되므로 이 열이 NULL 값을 수신할 수 있도록 해야 합니다. CREATEA로 생성할 때 NOT NULL로 설정하면 다음과 같은 오류가 발생합니다.

  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.

제약 조건이 있는 외래 키를 생성하면 ALTER TABLE 문으로 삭제할 때 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;

뱅_콘

생성하려는 하위 테이블의 이름입니다.

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, . cot_con_n in bang_con.

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이라는 외래 키로 생성됩니다.

상위 테이블의 id_sanpham 데이터가 삭제될 때 hangtonkho 하위 테이블의 해당 레코드가 NULL 값으로 설정된다는 것을 SQL Server가 이해하도록 ON DELETE SET NULL을 지정합니다.