17. 숙제 및 해설

2026. 2. 11. 23:34·BackEnd/내일배움캠프

# 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 관리 데이터 자동 삭제

'BackEnd > 내일배움캠프' 카테고리의 다른 글

글을 올리지 않은 이유  (0) 2026.03.13
16. JDBC란 무엇일까?  (0) 2026.02.11
15. SQL  (0) 2026.02.11
14. Database  (0) 2026.02.10
13-2. Update, Delete 구현하기  (0) 2026.02.10
'BackEnd/내일배움캠프' 카테고리의 다른 글
  • 글을 올리지 않은 이유
  • 16. JDBC란 무엇일까?
  • 15. SQL
  • 14. Database
JK-LEE98
JK-LEE98
백엔드 개발자
  • JK-LEE98
    JK-LEE98
    JK-LEE98
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 나의 지식 공유 (4)
      • SQL (4)
      • PS (10)
      • BackEnd (32)
        • Java (3)
        • Spring (4)
        • 내일배움캠프 (20)
        • 프로그래머스 데브코스 (5)
      • 건강한 나 되기🍀 (10)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
JK-LEE98
17. 숙제 및 해설
상단으로

티스토리툴바