08_DDL

Hyunny ·2023년 5월 22일
0

SQL

목록 보기
8/11
post-thumbnail

📌 DDL : 데이터 정의 언어로 객체(OBJECT)를 만들고(CREATE), 수정하고(ALTER), 삭제(DROP)하는 구문

오라클 객체 종류
테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 패키지(PACKAGE),
프로시저(PROCEDUAL), 함수(FUNCTION), 트리거(TRIGGER), 동의어(SYNONYM), 사용자(USER)


📌 CREATE : 테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성하는 구문

테이블 생성하기
테이블이란?
행(row)과 열(CLOUMN)으로 구성되는 가장 기본적인 데이터베이스 객체
데이터 베이스 내에서 모든 데이터는 테이블을 통해서 저장된다.
테이블로 생성된 객체는 DROP 구문을 통해 제거할 수 있음


📃 CHAR : 고정 길이 문자열

최대 2000BYTE , 한글 유니코드 => 3BYTE
지정한 크기보다 작은 문자(열)가 입력되면 남는 공간은 공백으로 채움
-> ex) CHAR(10) 컬럼에 'ABC' 3BYTE 문자열만 저장해도 10BYTE 저장공간을 모두 사용.


📃 VARCHAR2 : 가변 길이 문자열

크기가 0인 값은 NULL로 인식
-> ex) VARCHAR2(10) 컬럼에 'ABC' 3BYTE 문자열만 저장하면 나머지 7BYTE를 반환함.


📃 NUMBER

  • P : 표현할 수 있는 전체 숫자 자리 수 (1 ~ 38)
  • S : 소수점 이하 자리 수 (-84 ~ 127)

📃 DATE

일자(세기/년/월/일) 및 시간(시/분/초) 정보 관리
기본적으로 화면에 년/월/일 정보만 표기
날짜 연산 및 비교 가능


📃 컬럼주석 : 테이블의 컬럼에 주석을 다는 구문

COMMENT ON COLUMN 테이블명.컬럼명 IS ‘주석 내용';


📌 제약조건(CONSTRAINTS) : 테이블 작성 시 각 컬럼에 기록될 데이터에 대해 제약조건을 설정

이는 데이터 무결성 보장을 주 목적으로 함

입력 데이터에 문제가 없는지에 대한 검사와 데이터의 수정/삭제 가능 여부 검사 등을 위해 사용

🧀 NOT NULL

  • 해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용
  • 삽입/수정시 NULL 값을 허용하지 않도록 컬럼레벨에서 제한

🧀 UNIQUE

  • 컬럼에 입력 값에 대해 중복을 제한하는 제약조건
  • 컬럼레벨에서 설정 가능, 테이블 레벨에서 설정 가능
  • 단, UNIQUE 제약 조건이 설정된 컬럼에 NULL 값은 중복 삽입 가능
CREATE TABLE USER_USED_UK(
    USER_NO NUMBER,
    -- USER_ID VARCHAR2(20) UNIQUE, -- 컬럼레벨 제약조건 설정 (제약 조건명 미지정)
    -- USER_ID VARCHAR2(20) CONSTRAINT USER_ID_U UNIQUE, 
                                    -- 제약 조건명 지정
    USER_ID VARCHAR2(20),                                
    USER_PWD VARCHAR2(30),
    USER_NAME VARCHAR2(30),
    GENDER VARCHAR2(10),
    PHONE VARCHAR2(30),
    EMAIL VARCHAR2(50),
    
    -- 테이블 레벨 제약조건 설정 부분
    -- UNIQUE(USER_ID) -- 테이블 레벨 제약조건 설정(제약조건명 미지정)
    CONSTRAINT USER_ID_U UNIQUE(USER_ID) -- 제약조건명 지정
);

🧀 UNIQUE 복합키

  • 두 개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약조건으로 설정함
  • 모든 컬럼의 값이 같아야만 중복으로 취급
  • 복합키는 테이블 레벨로만 지정 가능
  • 여러 컬럼을 묶어서 UNIQUE 제약 조건이 설정되어 있으면, 두 컬럼이 모두 중복되는 값일 경우에만 오류 발생

🧀 PRIMARY KEY (기본키)

  • 테이블에서 한 행의 정보를 찾기 위해 사용할 컬럼을 의미
  • 테이블에 대한 식별자(IDENTIFIER) 역할을 함
  • NOT NULL + UNIQUE 제약조건을 의미
  • 한 테이블 당 한 개만 설정 가능
  • 컬럼레벨, 테이블레벨 둘 다 설정 가능

🧀 PRIMARY KEY (복합키)

  • 테이블 레벨만 설정 가능
  • 기본키를 두개 설정 하였을 경우 (복합키)
  • 두 개의 키 둘다 중복 되었을 때만 제약조건 위배 에러 발생

🧀 FOREIGN KEY (외부키/ 외래키)

  • 다른 테이블의 PK 또는 UNIQUE 제약조건이 설정된 컬럼
  • 참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음
  • 제공되는 값 외에는 NULL을 사용할 수 있음

🔊 FOREIGN KEY 삭제 옵션

  • SELECT * FROM USER_GRADE;
    ->참조를 당하는 테이블 == 부모 테이블
  • SELECT * FROM USER_USED_FK;
    -> 참조를 하는 테이블 == 자식 테이블
  • 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떤식으로 처리할 지에 대한 내용을 설정할 수 있다.

1) ON DELETE RESITRICTED(삭제 제한)

  • FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제하지 못함

2) ON DELETE SET NULL : 부모키 삭제시 자식키를 NULL로 변경하는 옵션

3) ON DELETE CASCADE : 부모키 삭제시 자식키도 함께 삭제됨

  • 부모키 삭제시 값을 사용하는 자식 테이블의 컬럼에 해당하는 행이 삭제 됨

🧀 CHECK 제약 조건

  • 컬럼에 기록되는 값에 조건 설정 할 수 있음
  • CHECK (컬럼명 비교연산자 비교값)
  • 주의 : 비교값은 리터럴만 사용할 수 있음, 변하는 값이나 함수 사용 못함

🧀 SUBQUERY를 이용한 테이블 생성

  • 컬럼명, 데이터 타입, 값이 복사되고, 제약조건은 CHECK, NOT NULL만 복사됨

🧀 제약조건 추가

  • ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명) [REFERENCES 테이블명 [(컬럼명)]];
  • NOT NULL 제약조건은 다루는 방법이 다름
  • NOT NULL을 제외한 제약 조건은 추가적인 조건으로 인식됨 ( ADD / DROP )
  • NOT NULL은 기존 컬럼의 성질을 변경하는 것으로 인식됨 (MODIFY)

🧀 제약조건 삭제

  • ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
  • NOT NULL 은 MODIFY 사용 !!
profile
개발 learning ... 📝

0개의 댓글