SQL FOREIGN KEY 제약
FOREIGN KEY는 두 테이블을 함께 연결하는 데 사용되는 키입니다.
FOREIGN KEY는 다른 테이블의 PRIMARY KEY를 참조하는 한 테이블의 필드 (또는 필드 모음)입니다.
외래 키를 포함하는 테이블을 하위 테이블이라고하고 후보 키를 포함하는 테이블을 참조 또는 상위 테이블이라고합니다.
다음 두 테이블을보십시오.
"사람"테이블 :
PersonIDLastNameFirstNameAge
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
"주문"테이블 :
OrderIDOrderNumberPersonID
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
"Orders"테이블의 "PersonID"열은 "Persons"테이블의 "PersonID"열을 가리 킵니다.
"Persons"테이블의 "PersonID"열은 "Persons"테이블의 PRIMARY KEY입니다.
"Orders"테이블의 "PersonID"열은 "Orders"테이블의 FOREIGN KEY입니다.
FOREIGN KEY 제약 조건은 테이블 간의 링크를 파괴하는 작업을 방지하는 데 사용됩니다.
FOREIGN KEY 제약 조건은 또한 잘못된 데이터가 가리키는 테이블에 포함 된 값 중 하나 여야하므로 외래 키 열에 삽입되는 것을 방지합니다.
CREATE TABLE의 SQL FOREIGN KEY
다음 SQL은 "Orders"테이블이 생성 될 때 "PersonID"열에 FOREIGN KEY를 생성합니다.
MySQL :
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server / Oracle / MS 액세스 :
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
FOREIGN KEY 제약 조건의 이름을 지정하고 여러 열에 FOREIGN KEY 제약 조건을 정의하려면 다음 SQL 구문을 사용하십시오.
MySQL / SQL Server / Oracle / MS 액세스 :
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
ALTER TABLE의 SQL FOREIGN KEY
"Orders"테이블이 이미 생성 된 경우 "PersonID"열에 FOREIGN KEY 제약 조건을 생성하려면 다음 SQL을 사용합니다.
MySQL / SQL Server / Oracle / MS 액세스 :
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
FOREIGN KEY 제약 조건의 이름을 지정하고 여러 열에 FOREIGN KEY 제약 조건을 정의하려면 다음 SQL 구문을 사용하십시오.
MySQL / SQL Server / Oracle / MS 액세스 :
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
외래 키 제약 조건 삭제
FOREIGN KEY 제약 조건을 삭제하려면 다음 SQL을 사용하십시오.
MySQL :
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS 액세스 :
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;