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
데이터 타입 | 설명 | 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 | 날짜형, 연도, 월, 날, 시간을 저장한다. |
- 테이블을 구성하는 각 속성의 데이터 타입을 선택한 다음 NULL값 허용 여부와 기본 값 필요 여부를 결정
- ex) custid VARCHAR(20) NOT NULL
- ex) price INT DEFAULT 0
- ex) name VARCHAR(10) DEFAULT '박세리'
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 | 관련 투플의 외래키 값을 미리 지정한 기본 값으로 변경함 |
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);
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));
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);
ALTER TABLE 테이블이름
[ADD 속성이름 데이터타입]
[DROP COLUMN 속성이름]
[MODIFY 속성이름 데이터타입]
[MODIFY 속성이름 [NULL┃NOT NULL]]
[ADD PRIMARY KEY(속성이름)]
[[ADD ┃ DROP] 제약이름]
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);
Q2. NewBook 테이블의 isbn 속성의 데이터 타입을 INTEGER형으로 변경하시오
👉 ALTER TABLE NewBook MODIFY isbn INTEGER;
Q3. NewBook 테이블의 isbn 속성을 삭제하시오.
👉 ALTER TABLE NewBook DROP COLUMN isbn;
Q4. NewBook 테이블의 bookid 속성에 NOT NULL 제약조건을 적용하시오.
👉 ALTER TABLE NewBook MODIFY bookid INTEGER NOT NULL;
Q5. NewBook 테이블의 bookid 속성을 기본키로 변경하시오
👉 ALTER TABLE NewBook ADD PRIMARY KEY(bookid);
데이터만 삭제하려면 DELETE 문을 사용해야 함
DROP TABLE 테이블이름
Q1. NewBook 테이블을 삭제하시오.
👉 DROP TABLE NewBook;
Q2. NewCustomer 테이블을 삭제하시오. 만약 삭제가 거절된다면 원인을 파악하고 관련된 테이블을 같이 삭제하시오(NewOrders 테이블이 NewCustomer를 참조하고 있음).
<DROP TABLE NewCustomer; -> 이렇게만 하게 되면 오류 발생
👉 DROP TABLE NewOrders;
DROP TABLE NewCustomer;
참조하고 있는 테이블을 삭제할 때는 기존에 참조하고 있는 테이블 먼저 삭제 후 메인 테이블을 삭제해줘야 오류없이 가능하다.