[DB/SQL] SQL 기본 및 활용 - DDL

Joo·2024년 2월 21일

RDB & SQL

목록 보기
6/24

강의 링크 : https://www.youtube.com/watch?v=Cv6256AkFU8&list=PLg_wJlcMiuKtGdlIaAZ0rOPPQuTDENnEQ&index=7


테이블 생성 규칙

  • 테이블명
    • 객체를 의미할 수 있는 이름으로, 단수형 권고함
    • 다른 테이블의 이름과 중복되지 않아야 함
  • 칼럼명
    • 한 테이블 내에서는 칼럼명이 중복되지 않아야 함
    • 테이블 생성 시 각 컬럼들은 괄호 내에서 콤마로 구분됨
    • 칼럼 뒤에 데이터 유형이 반드시 지정되어야 함
  • 테이블명 & 칼럼명
    • 사전에 정의된 예약어(Reserved word)는 사용 불가
      • 예약어 : SELECT, FROM, WHERE, SET, CONSTRAINT 등
    • 테이블명과 칼럼명에는 문자, 숫자, 일부 기호(_, $, #)만 허용됨
    • 테이블명과 칼럼명은 반드시 문자로 시작해야 함(숫자, 기호 불가)
  • 제약조건명 : 다른 제약조건의 이름과 중복되지 않아야 함
    • PK에 대한 조건, NOT NULL에 대한 조건, FK에 대한 조건 등(PK, FK, NOT NULL, UNIQUE, CHECK)

데이터 타입

  • Oracle의 주요 데이터 타입

제약 조건(Constraints)

  • NOT NULL이면서 UNIQUE하다고 해서 그게 모두 PK인 것은 아님


실습 테이블

PLAYER 테이블 구조

  • PK는 원래 NOT NULL임



DDL - 테이블 생성

테이블 생성 SQL문 - STADIUM

테이블 생성 SQL문 - TEAM

테이블 생성 SQL문 - SCHEDULE


제약 조건의 지정

  • 1(묵시적), 2번 방식(명시적 제약 조건 형성)

    명시적 제약 조건 형성에서는 'CONSTRAINT 이름'이 들어가 있음

  • 3번 방식

    데이터 타입을 먼저 선언하고 명시적 제약 조건 형성

  • FK 제약 조건의 옵션

    • 예) CONSTRAINT fk1 FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
      ON DELETE CASCADE ON UPDATE RESTRICT;
    • Referential Triggered Action
      • ON UPDATE, ON DELETE
    • Referential Action
      - RESTRICT(Default) : 기본값의 삭제 또는 갱신을 불허
      - NO ACTION : RESTRICT와 동일하게 동작
      - CASCADE
      - 기본키가 삭제되면 해당 값을 외래키로 갖는 레코드도 삭제
      - 기본키가 갱신되면 이를 참조하는 외래키를 새로운 값으로 업데이트
      - SET NULL
      - 기본키가 삭제 또는 갱신되면 이를 참조하는 외래키를 NULL로 업데이트

RESTRICT, NO ACTION이면 참조 무결성에 위배되는 행위를 막아버리는 것
아래는 참조 무결성에 위배되더라도 무시하고 처리하는 것들임

ON DELETE CASCADE : 없애려면 문제 생기니 PK의 레코드도 없애기
ON UPDATE CASCADE : FK를 바꾸려면 원래 테이블의 레코드도 바꾸기
ON DELETE SET NULL : 없애려면 문제 생기니 PK의 레코드를 NULL로 바꾸기
ON UPDATE SET NULL : FK를 NULL로 바꾸고 원래 테이블의 레코드만 원하는 바꾸기

※ CASCADE가 붙으면 DELETE든 UPDATE든 원래 레코드도 DELETE 및 UPDATE,
SET NULL이 붙으면 원래 레코드는 NULL 처리


NOT NULL을 제외한 다른 제약 조건은 테이블 수정을 통해 추가할 수 있음



ALTER 문을 통한 테이블 변경

  • 칼럼의 추가/삭제/수정, 제약 조건의 추가/삭제

    • 테이블명 변경은 RENAME으로 수행함
    • ADD, DROP, RENAME, MODIFY 중 DROP과 RENAME만 뒤에 'COLUMN'이라는 단어를 붙여줌
  • (1) 칼럼의 추가 (ADD)

    • 새로 추가한 칼럼은 테이블의 맨 마지막에 추가됨
      ALTER TABLE PLAYER_TEMP ADD (ADDRESS VARCAHR2(80));
  • (2) 칼럼의 삭제 (DROP COLUMN)

    • 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 함
      ALTER TABLE PLAYER_TEMP DROP COLUMN ADDRESS;
  • (3) 칼럼명 변경 (RENAME COLUMN)

    • 해당 칼럼의 모든 정의가 그대로 유지됨
      ALTER TABLE PLAYER_TEMP RENAME COLUMN PLAYER_ID TO PLAYER_NEW_ID;
  • (4) 칼럼의 정의 수정 (MODIFY COLUMN)

    • 이미 입력되어 있는 값에 영향을 미치는 변경은 허용하지 않음
    • 데이터 타입 변경
      • 테이블에 아무 행도 없거나, 해당 칼럼이 NULL만 갖고 있을 때 가능
    • 칼럼의 크기 변경
      • 칼럼의 크기 확대 → 항상 가능
      • 칼럼의 크기 축소 → 테이블에 아무 행도 없거나, 해당 칼럼이 NULL만 갖고 있거나, 현재 저장된 값을 수용할 수 있는 크기로의 축소 가능
    • DEFAULT 값 추가 및 수정
      • 추가 및 수정 이후 삽입되는 행에만 영향을 미침
  • (4) 칼럼의 정의 수정 (MODIFY COLUMN) - cont'd

    • NOT NULL 제약조건 추가
      • 테이블에 아무 행도 없거나, 해당 칼럼이 NULL만 갖고 있을 때 가능
    • NOT NULL 제약조건 삭제 → 항상 가능
    • NOT NULL 제약조건 추가 / 삭제
      • ALTER TABLE 테이블명 MODIFY (속성명 NOT NULL/NULL)

Q) PLAYER_TEMP 테이블에서 PLAYER_NAME 속성이 NULL값을 허용하도록 정의를 변경하시오.

⌨️ A) 입력 :

DESC PLAYER_TEMP;

ALTER TABLE PLAYER_TEMP MODIFY (PLAYER_NAME NULL);
  • (5) 제약 조건의 추가/삭제 (ADD/DROP CONSTRAINT) - NOT NULL 이외


Q) PLAYER_TEMP 테이블에서 PLAYER_NEW_ID를 PK로 지정하시오.

⌨️ A) 입력 :

SELECT * FROM ALL_CONSTRAINTS # 현재 제약 조건 확인
WHERE TABLE_NAME = 'PLAYER_TEMP'

ALTER TABLE PLAYER_TEMP
ADD CONSTRAINT PLAYER_TEMP_PK PRIMARY KEY (PLAYER_NEW_ID)



ALTER 문을 통한 테이블 변경

  • RENAME 기존 테이블명 TO 새 테이블명

Q) PLAYER_TEMP 테이블의 명칭을 OLD_PLAYER로 변경하시오.

⌨️ A) 입력 :

SELECT * FROM USER_OBJECTS    # 사용자 생성 객체의 확인
WHERE OBJECT_TYPE = 'TABLE';

RENAME PLAYER_TEMP TO OLD_PLAYER

DESC OLD_PLAYER;



DROP 문을 통한 테이블 삭제

profile
적당히 공부한 거 정리하는 곳

0개의 댓글