Database/SQL

데이터 정의어 (DDL) : CREATE문

2022. 7. 28. 03:28

데이터 정의어 (DDL)

CREATE문


CREATE문

· PRIMARY KEY : 기본키 지정

· FOREIGN KEY : 외래키 지정

CREATE TABLE 테이블명
( { 속성이름(컬럼명) 데이터타입
	[NOT NULL | UNIQUE | DEFAULT 기본값 | CHECK 체크조건] }
	[PRIMARY KEY 속성이름(들)]
  {[FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)]
	[ON DELETE [CASCADE┃SET NULL]
} )

 

 데이터 타입의 종류

데이터 타입 설명 ANSI SQL 표준 타입
INTERGER
INT
4바이트 정수형 INTERGER, 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 날짜형, 연도, 월, 날, 시간을 저장  

 

기본키를 지정하고 싶은 경우,

 

CREATE TABLE                NewBook (
                 bookid                INTEGER                    PRIMARY KEY  (bookid),
                 bookname        VARCHAR(20),
                 publisher           VARCHAR(20),
                 price                    INTEGER)
;

 

또는

 

CREATE TABLE                NewBook (
                 bookid                INTEGER, 
                 bookname        VARCHAR(20),
                 publisher           VARCHAR(20),
                 price                    INTEGER);

                PRIMARY KEY  (bookid));

 


 

원하는 속성이 없어서 기본키를 여러개 지정하고자 하는 경우

 

CREATE TABLE                NewBook (  
                 bookname       VARCHAR(20),
                 publisher          VARCHAR(20),
                 price                   INTEGER);

                PRIMARY KEY  (bookname, publisher));

 


 

제약 설정

: bookname은 null값을 가질 수 없고
  publisher는 중복되는 값이 있어서는 안된다.
  price는 값이 입력되지 않았을 경우 기본값 100000을 저장하고, 최소 1,000원 이상이 되도록 한다.

CREATE TABLE                NewBook (  
                 bookname       VARCHAR(20) NOT NULL,
                 publisher          VARCHAR(20) UNIQUE,
                 price                   INTEGER) DEFAULT 10000 CHECK(price > 1000),

                PRIMARY KEY  (bookname, publisher));


연습문제


질의 3-35.  다음과 같은 속성을 가진 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)
            );

 

질의3-36. 다음과 같은 속성을 가진 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,
		salesprice INTEGER,
		orderdate DATE,
		PRIMARY KEY(orderid),
		FOREIGN KEY(custid) REFERENCES NewCustomer(custid) ON DELETE CASCADE
        			);

FOREIGN KEY()

외래키 제약 조건 명시할 때

반드시 참조되는 테이블(부모 릴레이션)이 존재해야 하며, 참조되는 테이블의 기본키여야 한다.

→ custid 컬럼은 (질의3-36)에서 생성한 NewCustomer 테이블의 기본키이다.

외래키 지정시

ON DELETE 또는 ON UPDATE 옵션은 참조되는 테이블의 튜플이 삭제되거나 수정될 때 취할 수 있는 동작을 지정한다.

 

'Database > SQL' 카테고리의 다른 글

[데이터 전처리1] 코드값 레이블로 변경하기  (0) 2022.07.29
데이터를 가공해야 하는 이유?  (0) 2022.07.29
집합연산  (0) 2022.07.28
Q3-31 : 상관 부속질의  (0) 2022.07.28
부속질의  (0) 2022.07.28