SQL FOREIGN KEY Constraint
FOREIGN KEY는 두 테이블은 연결한다.
FOREIGN KEY는 다른 테이블의 PRIMARY KEY를 참조하는 테이블의 필드이다.
foreign key를 포함하는 테이블은 자식 테이블(child table)으로 불리고 참조되는 테이블은 부모 테이블(parent table)이라고 불린다.
Oders테이블의 PersonID는 Persons 테이블의 PersonID를 참조하고 있다. Persons의 PersonID는 PRIMARY KEY이며 Orders의 PersonID는 FOREIGN KEY이다.
FOREIGN KEY 제약조건은 카리키는 테이블에 포함된 값 중에 하나여야하기 때문에 잘못된 데이터가 foreign key column에 삽입되는 것을 방지한다.
SQL FOREIGN KEY on CREATE TABLE
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 Access:
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
MySQL / SQL Server / Oracle / MS Access:
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)
);
SQL FOREIGN KEY on ALTER TABLE
이미 존재하는 테이블에 Foreign key를 설정할 때
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
Foreign key에 이름을 부여하고 여러개의 column에 Foreign key 제약을 걸때
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
DROP a FOREIGN KEY Constraint
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
Comments