# MANAGER 테이블 생성 및 제약조건 설정 정리
1. MANAGER 테이블 생성
요구사항
- 컬럼: id, name, student_code
- id: bigint, PK
- name: varchar, 최소 2자 이상, NOT NULL
- student_code: STUDENT(student_code)를 참조하는 FK, NOT NULL
- FK 제약조건 이름: manager_fk_student_code
CREATE TABLE IF NOT EXISTS MANAGER (
id BIGINT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
student_code VARCHAR(100) NOT NULL,
CONSTRAINT manager_fk_student_code
FOREIGN KEY (student_code)
REFERENCES STUDENT(student_code)
);
설명
- IF NOT EXISTS ← EXISTS 아님
- 제약조건 이름에는 작은따옴표('') 사용하지 않음
- FOREIGN KEY는 반드시 REFERENCES 키워드 필요
2. id 컬럼에 AUTO_INCREMENT 추가
ALTER TABLE MANAGER
MODIFY COLUMN id BIGINT AUTO_INCREMENT;
설명
- MODIFY 오타 수정 (MODIFIY → MODIFY)
- MySQL 기준 AUTO_INCREMENT 사용
- PK 컬럼이어야 AUTO_INCREMENT 가능
3. 데이터 INSERT
INSERT INTO MANAGER (name, student_code) VALUES ('managerA', 's1');
INSERT INTO MANAGER (name, student_code) VALUES ('managerA', 's2');
INSERT INTO MANAGER (name, student_code) VALUES ('managerA', 's3');
INSERT INTO MANAGER (name, student_code) VALUES ('managerA', 's4');
INSERT INTO MANAGER (name, student_code) VALUES ('managerA', 's5');
INSERT INTO MANAGER (name, student_code) VALUES ('managerB', 's6');
INSERT INTO MANAGER (name, student_code) VALUES ('managerB', 's7');
INSERT INTO MANAGER (name, student_code) VALUES ('managerB', 's8');
INSERT INTO MANAGER (name, student_code) VALUES ('managerB', 's9');
설명
- id는 AUTO_INCREMENT이므로 INSERT 시 제외
- STUDENT 테이블에 해당 student_code가 반드시 존재해야 함
4. JOIN 조회
SELECT s.name, e.exam_seq, e.score
FROM MANAGER m
JOIN STUDENT s ON m.student_code = s.student_code
JOIN EXAM e ON s.student_code = e.student_code
WHERE m.name = 'managerA';
설명
- MANAGER → STUDENT → EXAM 순으로 조인
- managerA가 관리하는 수강생만 조회
5. CASCADE 설정 (부모 삭제 시 자식 자동 삭제)
기존 FK 제거
ALTER TABLE EXAM
DROP CONSTRAINT exam_fk_student_code;
ALTER TABLE MANAGER
DROP CONSTRAINT manager_fk_student_code;
CASCADE 옵션 추가하여 재생성
ALTER TABLE EXAM
ADD CONSTRAINT exam_fk_student_code
FOREIGN KEY (student_code)
REFERENCES STUDENT(student_code)
ON DELETE CASCADE;
ALTER TABLE MANAGER
ADD CONSTRAINT manager_fk_student_code
FOREIGN KEY (student_code)
REFERENCES STUDENT(student_code)
ON DELETE CASCADE;
부모 삭제
DELETE FROM STUDENT
WHERE student_code = 's1';
결과
- STUDENT의 s1 삭제
- EXAM의 s1 시험 성적 자동 삭제
- MANAGER의 s1 관리 데이터 자동 삭제