07. DDL(CREATE) -1

CHOISUJIN·2023년 1월 13일
0
post-thumbnail

DDL(Data Definition Laguage) 데이터 정의 언어

  • 데이터 딕셔너리란?
    자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블
    데이터 딕셔너리는 사용자 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신된다!
  • 오라클에서의 객체란?
    테이블(TABLE), 뷰(VIEW), 시퀀스(), 인덱스(), 패키지(), 트리거(), 프로시져(), 함수(), 동의어(), 사용자()

<자료형>

  • NUMBER : 숫자형(정수, 실수)
  • CHAR(크기) : 고정길이 문자형 (최대 2000 BYTE)
    --> EX) CHAR(10) 컬럼에 'ABC' 3 BYTE 문자열만 저장해도 10 BYTE 저장공간을 모두 사용
  • VARCHAR2(크기) : 가변길이 문자형 (최대 4000 BYTE)
    --> EX) VARCHAR2(10) 컬럼에 'ABC' 3 BYTE 문자열만 저장하면 나머지 7BYTE는 자동으로 반환함
  • DATE : 날짜 타입
  • BLOB : 대용량 이진 데이터(4GB)
  • CLOB : 대용량 문자 데이터(4GB)

📍 CREATE

테이블이나 인덱스, 뷰 등 다양한 데이터베이스 객체를 생성하는 구문

CREATE TABLE 테이블명(
컬럼명 자료형(크기)
컬럼명 자료형(크기)
컬럼명 자료형(크기)
);

‼️ 컬럼에 주석 달기
COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';

COMMENT ON COLUMN MEMBER.MEMBER_ID IS '회원 아이디';

🙅‍♀️ 제약조건 (CONSTRAINTS)

사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약
--> 데이터 무결성 보장을 목적으로 함! 즉, 중복데이터 X

[NOT NULL]

해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용

  • 컬럼 레벨
CREATE TABLE USER_USED_NN(
	USER_NO NUMBER NOT NULL, -- 사용자 번호(모든 사용자는 사용자 번호가 있어야 한다)
						   	 --> 컬럼 레벨 제약 조건 설정
	USER_ID VARCHAR2(20),
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50)
);

[UNIQUE]

컬럼에 입력값에 대해서 중복을 제한하는 제약조건
단, NULL값은 중복 가능!!

  • 컬럼 레벨
    [CONSTRAINT 제약조건명] 제약조건
CREATE TABLE USER_USED_UK(
	USER_NO NUMBER ,
	USER_ID VARCHAR(20) UNIQUE, --컬럼 레벨
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50)
);
  • 테이블 레벨
    [CONSTRAINT 제약조건명] 제약조건(컬럼명)
CREATE TABLE USER_USED_UK(
	USER_NO NUMBER ,
	USER_ID VARCHAR(20),
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	[CONSTRAINT USER_ID_U] UNIQUE(USER_ID) --테이블레벨에서 제약조건 지정
);
  • UNIQUE 복합키
    --> 테이블 레벨에서만 지정 가능
CREATE TABLE USER_USED_UK2(
	USER_NO NUMBER ,
	USER_ID VARCHAR(20),
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	--테이블 레벨 UNIQUE 복합키 지정
	CONSTRAINT USER_ID_NAME_U UNIQUE(USER_ID, USER_NAME)
);

[PRIMARY KEY 기본키]

테이블에서 한 행의 정보를 찾기 위해 사용할 컬럼을 의미함
--> 테이블에 대한 식별자 역할 !
--> NOT NULL + UNIQUE : 중복되지 않는 값이 필수로 존재해야 함
--> 한 테이블 당 한개만 설정 가능

  • 컬럼 레벨
CREATE TABLE USER_USED_PK(
	USER_NO NUMBER [CONSTRAINT USER_NO_PK] PRIMARY KEY, --컬럼 레벨
	USER_ID VARCHAR(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50)	
);
  • 테이블 레벨
CREATE TABLE USER_USED_PK(
	USER_NO NUMBER ,
	USER_ID VARCHAR(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),	
	[CONSTRAINT USER_NO_PK ] PRIMARY KEY(USER_NO)
);

[FOREIGN KEY 외래키/외부키]

참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음
--> FOREIGN KEY 제약조건에 의해서 테이블 간의 관계가 형성됨

  • 컬럼 레벨
    컬럼명 자료형(크기) [CONSTRAINT 제약명] REFERENCES 참조할테이블명 [(참조할컬럼)][삭제룰]
CREATE TABLE USER_USED_FK(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER [CONSTRAINT GRADE_CODE_FK] REFERENCES USER_GRADE [ (GRADE_CODE)]
);
  • 테이블 레벨
    [CONSTRAINT 제약명] FOREIGN KEY(적용할컬럼명) REFERENCES 참조할테이블명 [(참조할컬럼)][삭제룰]
CREATE TABLE USER_USED_FK(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER,
    [CONSTRAINT GRADE_CODE_FK] FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE [(GRADE_CODE)]
);

※ 컬럼명 미작성시 USER_GRADE 테이블의 PK를 자동 참조

  • FOREIGN KEY 삭제 옵션
    부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떤식으로 처리할지에 대한 내용을 설정할 수 있음
  1. ON DELETE RESTRICTED (삭제 제한) --> 기본값
    : FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제하지 못함

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

CREATE TABLE USER_USED_FK2(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER CONSTRAINT GRADE_CODE_FK2 REFERENCES USER_GRADE2 ON DELETE SET NULL
);
  1. ON DELETE CASCADE
    : 부모키 삭제시 자식키도 함께 삭제됨
    --> 부모키 삭제시 값을 사용하는 자식 테이블의 컬럼에 해당하는 행이 삭제가 됨
CREATE TABLE USER_USED_FK3(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER, 
	CONSTRAINT GRADE_CODE_FK3 FOREIGN KEY(GRADE_CODE) 
	REFERENCES USER_GRADE3(GRADE_CODE) ON DELETE CASCADE
);

[CHECK]

📍 DROP

📍 ALTER

USER_TABLES : 사용자가 작성한 테이블을 확인하는 뷰
--> 데이터 딕셔너리에 정의되어 있음
SELECT * FROM USER_TABLES;

USER_CONSTRANINTS : 사용자가 작성한 제약조건을 확인하는 딕셔너리 뷰
SELECT * FROM USER_CONSTRAINTS;

profile
매일매일 머리 터지는 중 ᕙ(•̀‸•́‶)ᕗ

0개의 댓글