[Database] - 데이터 정의어(DDL)

오동훈·2021년 4월 11일
0

Database

목록 보기
7/39

1. CREATE - 테이블 생성

1.1 테이블 생성 기본 정의

  • 테이블 구성, 속성과 속성에 관한 제약 정의, 기본키 및 외래키를 정의하는 명령
    - PRIMARY KEY - 기본키를 정할 때 사용
    - FORIGN KEY - 외래키를 지정할 때 사용
CREATE TABLE 테이블이름
(   { 속성이름 데이터타입
	📌 [NOT NULL | UNIQUE | DEFAULT 기본값 | CHECK 체크조건] 
	}
	💨 [PRIMARY KEY 속성이름()]
	📢 {[FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)]
		[ON DELETE reference_option]
		[ON UPDATE reference_option]
	}
)

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAUL

1.2 데이터 타입 종류

데이터 타입설명ANSI SQL 표준 타입
INTEGER
INT
4바이트 정수형INTEGER, INT
SMALLINT
NUMERIC(m,d)
DECIMAL(m,d)
전체자리수 m, 소수점이하 자리수 d를 가진 숫자형DECIMAL(p, s)
NUMERIC[(p,s)]
CHAR(n)문자형 고정길이, 문자를 저장하고 남은 공간은 공백으로 채운다.CHARACTER(n)
CHAR(n)
VARCHAR(n)문자형 가변길이CHARACTER VARYING(n)
CHAR VARYING(n)
DATE날짜형, 연도, 월, 날, 시간을 저장한다.

1.3 📌 속성의 정의

- 테이블을 구성하는 각 속성의 데이터 타입을 선택한 다음 NULL값 허용 여부와 기본 값 필요 여부를 결정

  • NOT NULL
    - 속성이 NULL 값을 허용하지 않음을 의미하는 키워드
    - ex) custid VARCHAR(20) NOT NULL
  • UNIQUE
    - 유일한 값에 대한 제약
  • DEFAULT
    - 속성의 기본 값을 지정하는 키워드
    - ex) price INT DEFAULT 0
    - ex) name VARCHAR(10) DEFAULT '박세리'
  • CHECK
    - 값에 대한 조건을 부여할 때 사용

1.4 💨 키의 정의

  • PRIMARY KEY
    - 기본키를 지정하는 키워드
    - ex) PRIMARY KEY(고객아이디)
    - ex) PRIMARY KEY(주문고객, 주문제품)

  • UNIQUE
    - 대체키를 지정하는 키워드
    - 대체키로 지정되는 속성의 값은 유일성을 가지며 기본키와 달리 NULL 값이 허용됨
    - ex) UNIQUE(고객이름)

  • FOREIGN KEY - 특징 1
    - 외래키를 지정하는 키워드
    - 외래키가 어떤 테이블의 무슨 속성을 참조하는지 REFERENCES 키워드 다음에 제시됨
    - 참조 무결성 제약조건 유지를 위해 참조되는 테이블에서 투플 삭제 시 처리 방법을 지정하는 옵션

    옵션수행 내용
    ON DELETE RESTRICT부모 테이블의 투플을 삭제하지 못하게 함
    ON DELETE NO ACTION투플을 삭제하지 못하게 함
    ON DELETE CASCADE관련 투플을 함께 삭제함
    ON DELETE SET NULL관련 투플의 외래키 값을 NULL로 변경함
    ON DELETE SET DEFAULT관련 투플의 외래키 값을 미리 지정한 기본 값으로 변경함

    옵션설명
    ON DELETE NO ACTION부서 테이블의 투플을 삭제하지 못하게 함
    ON DELETE CASCADE사원 테이블에서 홍보부에 근무하는 정소화 사원 투플도 함께 삭제
    ON DELETE SET NULL사원 테이블에서 정소화 사원의 소속부서 속성 값을 NULL로 변경
    ON DELETE SET DEFAULT사원 테이블에서 정소화 사원의 소속부서 속성 값을 기본 값으로 변경
  • FOREIGN KEY - 특징 2
    – 참조 무결성 제약조건 유지를 위해 참조되는 테이블에서 투플
    변경 시 처리 방법을 지정하는 옵션
    – 예) FOREIGN KEY(소속부서) REFERENCES 부서(부서번호)
    – 예) FOREIGN KEY(소속부서) REFERENCES 부서(부서번호) ON DELETE CASCADE ON UPDATE CASCADE

    옵션수행 내용
    ON UPDATE RESTRICT부모 테이블의 투플의 업데이트를 못하게 함
    ON UPDATE NO ACTION투플을 변경하지 못하게 함
    ON UPDATE CASCADE관련 투플에서 외래키 값을 함께 변경함
    ON UPDATE SET NULL관련 투플의 외래키 값을 NULL로 변경함
    ON UPDATE SET DEFAULT관련 투플의 외래키 값을 미리 지정한 기본 값으로 변경함

1.5 example

1.5.1 example 1

Q1. 다음과 같은 속성을 가진 NewBook 테이블을 생성하시오. 정수형은 INTEGER를
사용하며 문자형은 가변형 문자타입인 VARCHAR을 사용한다.

  • bookid(도서번호)-INTEGER
  • bookname(도서이름)-VARCHAR(20)
  • publisher(출판사)-VARCHAR(20)
  • price(가격)-INTEGER
CREATE TABLE NewBook (
	bookid INTEGER, 
	bookname VARCHAR(20),
	publisher VARCHAR(20),
	price INTEGER);

1.5.2 example 2

Q2. 다음과 같은 속성을 가진 NewCustomer 테이블을 생성하시오.

  • custid(고객번호) - INTEGER, 기본키
  • name(이름) – VARCHAR(40)
  • address(주소) – VARCHAR(40)
  • phone(전화번호) – VARCHAR(30)
 CREATE TABLE NewCustomer (
	custid INTEGER PRIMARY KEY,
	name VARCHAR(40),
	address VARCHAR(40),
	phone VARCHAR(30));

1.5.3 example 3

Q3. 다음과 같은 속성을 가진 NewOrders 테이블을 생성하시오.

  • orderid(주문번호) - INTEGER, 기본키
  • custid(고객번호) - INTEGER, NOT NULL 제약조건, 외래키(NewCustomer.custid, 연쇄삭제)
  • bookid(도서번호) - INTEGER, NOT NULL 제약조건
  • saleprice(판매가격) - INTEGER
  • orderdate(판매일자) – DATE
CREATE TABLE NewOrders (
	orderid INTEGER,
	custid INTEGER NOT NULL,
	bookid INTEGER NOT NULL,
	saleprice INTEGER,
	orderdate DATE,
	PRIMARY KEY (orderid),
	FOREIGN KEY (custid) REFERENCES NewCustomer(custid) ON DELETE CASCADE);

2. ALTER - 테이블 변경

2.1 ALTER TABLE 문

  • 생성된 테이블의 속성과 속성에 관한 제약을 변경하며, 기본키 및 외래키를 변경함
    - ADD, DROP은 속성을 추가하거나 제거할 때 사용함
    - MODIFY는 속성의 기본값을 설정하거나 삭제할 때 사용함
    - ADD <제약이름>, DROP<제약이름>은 제약사항을 추가하거나 삭제할 때 사용함

2.2 ALTER TABLE 기본 문법

ALTER TABLE 테이블이름
    [ADD 속성이름 데이터타입]
	[DROP COLUMN 속성이름]
	[MODIFY 속성이름 데이터타입]
	[MODIFY 속성이름 [NULLNOT NULL]]
	[ADD PRIMARY KEY(속성이름)]
	[[ADDDROP] 제약이름]

2.3 example

2.3.1 example 1

Q1. NewBook 테이블에 VARCHAR(13)의 자료형을 가진 isbn 속성을 추가하시오.

CREATE TABLE NewBook (
	bookid INTEGER PRIMARY KEY, 
	bookname VARCHAR(20),
	publisher VARCHAR(20),
	price INTEGER)
    
----------------------------------------- 
    
👉 ALTER TABLE NewBook ADD isbn VARCHAR(13);

2.3.2 example 2

Q2. NewBook 테이블의 isbn 속성의 데이터 타입을 INTEGER형으로 변경하시오

👉 ALTER TABLE NewBook MODIFY isbn INTEGER;

2.3.3 example 3

Q3. NewBook 테이블의 isbn 속성을 삭제하시오.

👉 ALTER TABLE NewBook DROP COLUMN isbn;

2.3.4 example 4

Q4. NewBook 테이블의 bookid 속성에 NOT NULL 제약조건을 적용하시오.

👉 ALTER TABLE NewBook MODIFY bookid INTEGER NOT NULL;

2.3.5 example 5

Q5. NewBook 테이블의 bookid 속성을 기본키로 변경하시오

👉 ALTER TABLE NewBook ADD PRIMARY KEY(bookid);

3. DROP - 테이블 삭제

  • DROP TABLE 문은 테이블을 삭제하는 명령
  • DROP 문은 테이블의 구조와 데이터를 모두 삭제하므로 사용에 주의해야 함
    데이터만 삭제하려면 DELETE 문을 사용해야 함

3.1 DROP 문의 기본 문법

DROP TABLE 테이블이름

3.2 example

3.2.1 example 1

Q1. NewBook 테이블을 삭제하시오.

👉 DROP TABLE NewBook;

3.2.2 example 2

Q2. NewCustomer 테이블을 삭제하시오. 만약 삭제가 거절된다면 원인을 파악하고 관련된 테이블을 같이 삭제하시오(NewOrders 테이블이 NewCustomer를 참조하고 있음).

<DROP TABLE NewCustomer; -> 이렇게만 하게 되면 오류 발생

👉 DROP TABLE NewOrders;
DROP TABLE NewCustomer;

참조하고 있는 테이블을 삭제할 때는 기존에 참조하고 있는 테이블 먼저 삭제 후 메인 테이블을 삭제해줘야 오류없이 가능하다.

profile
삽질의 기록들🐥

0개의 댓글