basics mysql foreign key constraint with examples
이 튜토리얼에서는 구문, 추가, 선언, 삭제 및 예제를 통해 변경하는 방법과 같은 MySQL FOREIGN KEY Constraint의 기본 사항을 설명합니다.
아주 간단한 용어로 FOREIGN KEY는 MySQL에서 두 개 이상의 테이블을 연결하는 데 사용됩니다.
소프트웨어 테스트의 샘플 테스트 케이스
서로 다른 시점에서 다양한 유형의 데이터를 쿼리하고 업데이트하려면 MySQL 테이블을 연결해야합니다. 따라서 2 개의 테이블 사이에 연결 지점이 있어야합니다.
이 튜토리얼에서는 외래 키의 다양한 사용법과 어떻게 선언하고 변경할 수 있으며 전체 테이블 구조에 대한 제약 조건에 대해 설명합니다.
학습 내용 :
MySQL 외래 키
통사론:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
위는 테이블 생성 중 또는 테이블에 대해 FOREIGN KEY를 지정할 때 사용되는 구문입니다. ALTER TABLE 문.
구문의 다양한 구성 요소를 이해해 보겠습니다.
- constrantName : 이것은 지정되는 FK 제약 조건에 대해 정의하려는 기호 이름입니다. 이것이 생략되면 MySQL 엔진은 자동으로 FK 제약 조건에 이름을 할당합니다.
- referColumnName : 이것은 참조 된 테이블의 열에 지정된대로 다른 테이블의 값을 참조하는 열입니다.
- 추천 테이블 / 상위 테이블 : 이것은 값이 참조되는 테이블의 이름을 나타냅니다.
- 추천 열 : 참조 된 테이블의 열 이름입니다.
- 참조 옵션 : 외래 키 제약 조건이있는 테이블에서 업데이트 또는 삭제 작업이 수행 될 때 나타나는 작업입니다. UPDATE와 DELETE는 모두 동일하거나 다른 참조 옵션을 가질 수 있습니다.
이 자습서의 뒷부분에서 다른 참조 무결성 작업에 대해 알아 봅니다.
Employee / Department 예제를 사용하여 FOREIGN KEY 참조의 예제를 보겠습니다. DepartmentId (int & PRIMARY KEY) 및 departmentName (varchar) 열이있는 Department 테이블을 생성합니다.
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100));
아래와 같이 열이있는 테이블 직원을 만듭니다.
기둥 | 유형 |
---|---|
신분증 | INT (기본 키) |
이름 | VARCHAR |
dept_id | 부서 테이블에서 참조되는 INT (외래 키) |
주소 | VARCHAR |
나이 | INT |
도브 | 데이트 |
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE);
보시다시피 위의 Employee 테이블에서 Int 유형의 deptId 열을 선언하고 departmentId 열의 Department 테이블에서 FOREIGN KEY를 정의했습니다.
이것이 본질적으로 Employee 테이블의 deptId 열은 Department 테이블에있는 값만 포함 할 수 있음을 의미합니다.
이 테이블에 데이터를 삽입하고 FOREIGN KEY CONSTRAINT의 작동 방식을 살펴 보겠습니다.
- 먼저 Department 테이블에 레코드를 만들고 Department 테이블에 추가 된 레코드의 ID를 참조하는 Employee 테이블에 레코드를 추가합니다.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
두 명령문이 오류없이 실행되는 것을 볼 수 있습니다.
- 이제 존재하지 않는 departmentId 값을 참조하십시오.
예를 들면 아래 쿼리 문에서 존재하지 않는 departmentId -10으로 Employee를 생성합니다.
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',10);
- 이 시나리오에서는 아래와 같은 오류가 발생합니다.
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
따라서 일반적으로 FOREIGN KEY References가 정의 될 때 참조되는 테이블이 참조되기 전에 데이터가 있는지 확인하는 것이 중요합니다.
참조 무결성 조치
먼저 참조 무결성이 정확히 무엇인지 이해해 보겠습니다.
참조 무결성은 FOREIGN KEY 관계로 서로 관련된 테이블이있는 깨끗하고 일관된 상태로 데이터를 유지하는 데 도움이됩니다.
간단히 말해서, 참조 무결성은 FOREIGN KEY를 포함하는 참조 된 테이블에서 UPDATE 또는 DELETE가 발생할 때 데이터베이스 엔진에서 취할 것으로 예상되는 조치를 나타냅니다.
예를 들면 Employee / Department 예제에서 DB의 특정 행에 대한 부서 ID를 변경한다고 가정합니다. 그러면 Employee 테이블의 모든 참조 행이 영향을받습니다. 이러한 경우에 적용될 수있는 다양한 유형의 참조 무결성 시나리오를 정의 할 수 있습니다.
노트 : 참조 무결성은 ON DELETE 및 ON UPDATE 명령 / 섹션의 일부로 FOREIGN KEY 설정 / 선언 중에 정의됩니다.
여기에서 샘플 쿼리를 참조하십시오 (직원 / 부서 예).
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100)); CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE {ref-integrity-action} ON DELETE {ref integrity action});
다음과 같이 이러한 테이블에 일부 데이터를 삽입하십시오.
INSERT INTO department VALUES (1, 'ENGINEERING'), (2,'ACCOUNTING'), (3, 'MARKETING'), (4, 'HR'), (5, 'LEGAL'); INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32,'1988-02-12',1), (2, 'RYAN HILMAN', 'SEATTLE',43, '1977-03-15',1), (3, 'KAVITA SINGH', 'DELHI', 42, '1978-02-18',4), (4, 'DAVID BECKHAM', 'LONDON', 40, '1980-07-13',3), (5, 'PRITI KUMARI', 'DELHI', 35, '1985-12-11',2), (6, 'FRANK BALDING', 'NEW YORK', 35, '1985-08-25',5)
MySQL에서 지원하는 4 개의 참조 작업이 있습니다. 그들 각각을 이해하려고 노력합시다.
# 1) 캐스케이드
이것은 가장 일반적으로 사용되는 참조 무결성 작업 중 하나입니다. DELETE 및 UPDATE를 CASCADE로 설정하면 참조 테이블의 참조 된 테이블, 즉 Employee / Department 예제에서 변경 사항이 적용됩니다. Department_name = ACCOUNTING이라고 말해야하는 Department 테이블의 행을 누군가가 삭제한다고 가정하면, Accounting 테이블과 같은 department_id를 갖는 Employee 테이블의 모든 행도 삭제됩니다.
예를 들어 이해해 보겠습니다.
SELECT * FROM employee;
신분증 | 이름 | 주소 | 나이 | 도브 | deptId |
---|---|---|---|---|---|
1 | AMIT 쿠마 | 뭄바이 | 32 | 1988-02-12 | 1 |
두 | 라이언 힐먼 | 시애틀 | 43 | 1977-03-15 | 1 |
삼 | 카 비타 싱 | 델리 | 42 | 1978-02-18 | 4 |
4 | 데이비드 베컴 | 런던 | 40 | 1980-07-13 | 삼 |
5 | 프리티 쿠마리 | 델리 | 35 | 1985-12-11 | 두 |
6 | 프랭크 볼딩 | 뉴욕 | 35 | 1985-08-25 | 5 |
departmentName이 'ACCOUNTING'인 부서 테이블에서 레코드 삭제
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
이제 CASCADE Referential 작업이므로 departmentID = 2 (‘ACCOUNTING’부서에 해당) 인 모든 행도 삭제되어야합니다. Employee 테이블에 대해 다시 SELECT 쿼리를 수행해 보겠습니다.
SELECT * FROM employee;
신분증 | 이름 | 주소 | 나이 | 도브 | deptId |
---|---|---|---|---|---|
1 | AMIT 쿠마 | 뭄바이 | 32 | 1988-02-12 | 1 |
두 | 라이언 힐먼 | 시애틀 | 43 | 1977-03-15 | 1 |
삼 | 카 비타 싱 | 델리 | 42 | 1978-02-18 | 4 |
4 | 데이비드 베컴 | 런던 | 40 | 1980-07-13 | 삼 |
6 | 프랭크 볼딩 | 뉴욕 | 35 | 1985-08-25 | 5 |
위에서 볼 수 있듯이 CASCADE 참조 무결성으로 인해 삭제 된 열을 FOREIGN KEY로 참조하는 Employee 테이블의 행에는 해당 행이 삭제됩니다.
# 2) 제한 / 조치 없음
RESTRICT 또는 NO ACTION 모드는 일부 테이블에서 FOREIGN KEY로 참조되는 열이있는 테이블에 대한 UPDATE 또는 DELETE 작업을 허용하지 않습니다.
NO ACTION 모드는 테이블 선언에서 ON UPDATE 및 ON DELETE 절을 생략하여 적용 할 수 있습니다.
동일한 예를 시도해 보겠습니다.이 경우에는 ON UPDATE 및 ON DELETE 참조 무결성 작업을 건너 뜁니다.
이제 참조 된 테이블의 항목을 삭제하려고하면 참조 작업을 RESTRICT로 설정했기 때문에 오류가 발생합니다.
DELETE FROM department WHERE departmentName='ACCOUNTING';
위의 DELETE 명령을 실행하려고하면 아래와 같은 오류가 표시됩니다.
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`))
# 3) NULL 설정
SET NULL을 사용하면 참조 된 테이블의 모든 UPDATE 또는 DELETE로 인해 참조 테이블에서 FOREIGN KEY로 표시된 열 값에 대해 NULL 값이 업데이트됩니다.
이 참조 무결성 작업을 통해 Employee 테이블의 정의는 다음과 같습니다.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON DELETE SET NULL);
아래와 같이 참조 된 테이블에서 행을 삭제합니다.
DELETE FROM department WHERE departmentName='ACCOUNTING';
이제이 경우 Employee 테이블에서 참조 된 값이 NULL로 설정됩니다. Employee 테이블에서 SELECT 쿼리를 수행하여 결과를 확인합니다.
SELECT * FROM employee;
신분증 | 이름 | 주소 | 나이 | 도브 | deptId |
---|---|---|---|---|---|
1 | AMIT 쿠마 | 뭄바이 | 32 | 1988-02-12 | 1 |
두 | 라이언 힐먼 | 시애틀 | 43 | 1977-03-15 | 1 |
삼 | 카 비타 싱 | 델리 | 42 | 1978-02-18 | 4 |
4 | 데이비드 베컴 | 런던 | 40 | 1980-07-13 | 삼 |
5 | 프리티 쿠마리 | 델리 | 35 | 1985-12-11 | 없는 |
6 | 프랭크 볼딩 | 뉴욕 | 35 | 1985-08-25 | 5 |
# 4) 기본값 설정
SET DEFAULT 모드를 지정하면 참조되는 테이블에서 DELETES가 발생하는 경우 열의 기본값이 열 선언 중에 지정된대로 대체됩니다.
노트 - 에 따라 MySQL 문서 , SET DEFAULT 옵션은 MySQL Parser에서 지원되지만 InnoDB와 같은 DB 엔진에서는 지원되지 않습니다. 이는 향후 지원 될 수 있습니다.
그러나 이러한 동작을 지원하기 위해 SET NULL 사용을 고려하고 기본값을 설정할 수있는 테이블에 트리거를 정의 할 수 있습니다.
ALTER TABLE 문을 사용하여 FOREIGN KEY 제약 조건 추가
FOREIGN KEY 제약 조건이없는 기존 테이블에 추가하고 싶을 때가 많습니다.
Employee 및 Department 예제에서 FOREIGN KEY 제약 조건없이 직원 테이블을 만들고 나중에 제약 조건을 도입하려고한다고 가정합니다. ALTER TABLE 명령을 사용하여 수행 할 수 있습니다.
예를 들어 이것을 이해하려고 노력합시다.
CREATE 명령에 대한 아래 정의가있는 Employee 테이블이 있다고 가정합니다.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
여기에는 deptId 열이 있지만 FOREIGN KEY 제약 조건은 없습니다. 이 경우 Department 테이블이 없어도 레코드를 삽입하는 동안 값을 지정할 수 있습니다.
이제 나중에 별도의 Department 테이블이 있고 여기에서 DepartmentId를 FOREIGN KEY로 Employee 테이블에 연결하려고한다고 가정합니다.
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
이 테이블에 기존 데이터가 있으면 어떻게됩니까? 테이블을 변경하고 FOREIGN KEY 제약 조건을 추가 할 수 있습니까?
대답은 '예'입니다. 다른 테이블에서 참조 할 열의 기존 값은 부모 테이블 자체에 해당 값이 있어야한다는 조건으로 할 수 있습니다.
FOREIGN KEY 제약 조건없이 Employee 테이블을 만들고 일부 데이터를 추가 한 다음 ALTER 명령을 사용하여 FOREIGN KEY 제약 조건을 추가해보십시오.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',1); INSERT INTO EMPLOYEE VALUES (2, 'ANITA SHERWIN', 'COLUMBIA', 32, '1988-02-12',10);
Department 테이블을 만들고 Employee 테이블의 'deptId'필드에 대해 FOREIGN KEY를 추가합니다.
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
이 시점에서 FOREIGN KEY 제약 조건을 추가하려고하면
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
그런 다음 Employee 테이블에 일부 데이터가 포함되어 있지만 Department 테이블에 아직 데이터가 없기 때문에 참조 무결성 제약 조건을 충족 할 수 없기 때문에 오류가 발생합니다.
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`#sql-63_87`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
FOREIGN KEY 제약 조건을 가지려면 먼저 Department 테이블에 데이터를 추가해야합니다. Department 테이블에 필요한 레코드를 삽입하겠습니다.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
동일한 ALTER TABLE 문을 실행하여 FOREIGN KEY 제약 조건을 다시 추가합니다. 이번에는 명령이 성공하고 Employee 테이블이 Department 테이블에서 deptId를 FOREIGN KEY로 갖도록 성공적으로 업데이트되었음을 알 수 있습니다.
FOREIGN KEY 제약 조건 삭제
FOREIGN KEY 제약 조건을 추가하는 것과 유사하게 테이블에서 기존 FOREIGN KEY 제약 조건을 삭제 / 삭제할 수도 있습니다.
이것은 ALTER TABLE 명령을 사용하여 수행 할 수 있습니다.
통사론:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
여기서 'childTable'은 FOREIGN KEY 제약 조건이 정의 된 테이블 이름이고, 'foreign key 제약 이름'은 FOREIGN KEY를 정의하는 데 사용 된 이름 / 기호입니다.
Employee / Department 테이블을 사용한 예를 살펴 보겠습니다. Employee 테이블에서 'depIdFk'라는 제약 조건을 삭제하려면 아래 명령을 사용하십시오.
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
자주 묻는 질문
Q # 1) MySQL에서 외래 키를 어떻게 변경할 수 있습니까?
대답: FOREGIN KEY는 ALTER TABLE 명령을 사용하여 추가 / 제거 할 수 있습니다.
새 FOREIGN KEY를 변경하거나 추가하려면 ALTER 명령을 사용하고 자식 테이블에서 참조 할 FOREIGN KEY 및 참조 테이블 열을 정의 할 수 있습니다.
Q # 2) MySQL에서 여러 외래 키를 설정하는 방법은 무엇입니까?
대답: MySQL의 테이블은 동일한 상위 테이블 또는 다른 상위 테이블에 종속 될 수있는 여러 FOREIGN KEYS를 가질 수 있습니다.
Employee / Department 테이블을 사용하고 Employee 테이블의 DepartmentId뿐만 아니라 부서 이름에 대한 FOREIGN KEY를 추가해 보겠습니다.
아래 두 테이블의 CREATE 문을 참조하십시오.
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100) UNIQUE NOT NULL); ----xxxxx------xxxxx------xxxxx-------xxxxx------xxxxx CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, depName VARCHAR(100), CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT depNameFk FOREIGN KEY (depName) REFERENCES department(departmentName) ON UPDATE CASCADE ON DELETE CASCADE);
Q # 3) MySQL에서 외래 키 제약 조건을 비활성화하는 방법은 무엇입니까?
대답: FOREIGN KEY 제약 조건은 일반적으로 누군가가 참조중인 기존 테이블을 자르려고 할 때 필요합니다. 이를 위해 아래 명령을 사용할 수 있습니다.
SET FOREIGN_KEY_CHECKS=0;
이것은 세션 변수를 설정하고 일시적으로 FOREIGN_KEY_CHECKS를 비활성화합니다. 이 설정 후에는 삭제 / 잘라내기를 수행 할 수 있습니다. 그렇지 않으면 불가능했을 것입니다.
그러나 이것이 관리자 권한이며 신중하게 사용해야합니다.
Q # 4) MySQL에서 테이블에 대한 외래 키 참조를 찾으려면 어떻게해야합니까?
대답: 존재하는 모든 FOREIGN KEY 제약 조건을 나열하려면 'INFORMATION_SCHEMA'의 'INNODB_FOREIGN_COLS'테이블을 사용할 수 있습니다.
아래 명령을 실행하여 주어진 MySQL 서버 인스턴스에 대해 존재하는 모든 FOREIGN KEY 선언을 가져옵니다.
신분증 | FOR_COL_NAME | REF_COL_NAME | POS |
---|---|---|---|
my_sql_foreign_key / depIdFk | deptId | departmentId | 1 |
Q # 5) FOREIGN KEY로 참조 된 열이 참조 된 테이블의 기본 키 여야합니까?
대답: FOREIGN KEY의 정의에 따라 FOREIGN KEY로 참조되는 열은 참조되는 테이블의 PRIMARY KEY 여야합니다.
그러나 최신 버전의 MySQL과 InnoDB 데이터베이스 엔진에서는 UNIQUE 제약 조건이 있고 반드시 PRIMARY KEY가 아닐 수도있는 FOREIGN KEY가있는 열을 참조 할 수도 있습니다.
Q # 6) FOREIGN KEY는 MySQL에서 INDEX를 생성합니까?
대답: Primary Key 및 Unique 제약 조건 모두에 대해 MySQL은 이러한 열에 대한 INDEX를 자동으로 생성합니다.
FOREIGN KEY 참조는 기본 키인 열이나 고유 한 값을 가진 열에 만 적용 할 수 있다는 것을 이미 알고 있으므로 FOREIGN KEY로 참조되는 모든 열에는 인덱스가 생성됩니다.
테이블의 인덱스를 보려면 아래 명령을 사용하십시오.
SHOW INDEX from {dbName.tableName};
따라서 Employee / Department 예제에서는 Department 테이블의 FOREIGN KEY로 Employee에 deptId를 추가했습니다.
Employee 및 Department 테이블에서 생성 된 인덱스를 살펴 보겠습니다.
USE my_sql_foreign_key; SHOW INDEX from employee;
표 | 고유하지 않음 | Key_name | Seq_in_index | Column_name | 대조 | 카디널리티 | 하위 부품 | 포장 된 | 없는 | Index_type |
---|---|---|---|---|---|---|---|---|---|---|
종업원 | 0 | 일 순위 | 1 | 신분증 | 에 | 0 | 없는 | 없는 | BTREE | |
종업원 | 1 | depIdFk | 1 | deptId | 에 | 0 | 없는 | 없는 | 예 | BTREE |
두 개의 인덱스를 볼 수 있습니다. 하나는 Employee 테이블의 기본 키이고 다른 하나는 Department 테이블에서 참조되는 FOREIGN KEY depId에 대한 것입니다.
SHOW INDEX from department;
표 | 고유하지 않음 | Key_name | Seq_in_index | Column_name | 대조 | 카디널리티 | 하위 부품 | 포장 된 | 없는 | Index_type |
---|---|---|---|---|---|---|---|---|---|---|
학과 | 0 | 일 순위 | 1 | departmentId | 에 | 0 | 없는 | 없는 | BTREE |
여기에서 Department 테이블의 경우 기본 키 (Employee 테이블에서 FOREIGN KEY로 참조되는)에 대한 인덱스가 1 개만 있음을 알 수 있습니다.
Q # 7) MySQL에서 FOREIGN KEY가 NULL 일 수 있습니까?
대답: 예, 다른 테이블에 대한 FOREIGN KEY 종속성이있는 열에 대해 NULL을 갖는 것은 완벽합니다. 이것은 또한 NULL이 실제 값이 아니므로 상위 테이블의 값과 일치 / 비교되지 않는다는 사실을 암시합니다.
결론
이 튜토리얼에서 우리는 MySQL 데이터베이스에서 FOREIGN KEYS를 사용하는 것과 관련된 다양한 개념에 대해 배웠습니다.
FOREIGN KEY는 적절한 제한 사항으로 업데이트 및 삭제를 용이하게하지만 때로는 이러한 관계가 많으면 삽입 및 / 또는 삭제의 전체 프로세스가 매우 번거로울 수 있습니다.
FOREIGN KEYS를 생성하는 방법과 자식 테이블에서 기존 FOREIGN KEY를 업데이트 및 삭제하는 방법을 배웠습니다. 또한 다양한 참조 무결성 작업과 CASCADE, NO ACTION, SET NULL 등과 같은 다양한 사용 가능한 옵션을 사용하여 다른 동작을 달성하는 방법에 대해서도 배웠습니다.