| 니앙팽이 - DB | 7 | SQL - DDL(데이터 정의어)

2023. 9. 14. 20:03·CS/DB
no title

7. DDL 데이터 정의어


1. CREATE

CREATE [SCHEMA, DOMAIN, TABLE, VIEW, INDEX]

1. SCHEMA

/******************************************************
* 기본형
******************************************************/
CREATE  SCHEMA _SCHEMA_NAME_ AUTHORIZATION _USERID_;

/******************************************************
* DBADM 권한을 갖는 사용자로서, 
* 사용자 "김민수"을 소유자로 갖는 
* "인벤토리" 라는 스키마를 작성하고, 
* "파츠" 라는 테이블을 만들고 (PARTNO : INTEGER, DESCR : VARCHAR(24), QUANTITY INTEGER) 행튜레를 가지며
* PARTNO는 널값을 가지지 않는다. 그리고 PARTNO에 대해 PART라는 인덱스를 오름차순으로 만들어라
******************************************************/

CREATE SCHEMA INVENTORY AUTHORIZATION 김민수
    CREATE TABLE PART   (
                            PARTNO      INTEGER     NOT NULL,
                            DESCR       VARCHAR(24),
                            QUANTITY    INTEGER
                        )
    CREATE INDEX PARTINDEX ON PART (PARTNO)

2. DOMAIN
테이블 CoFiAtt 에서 원자값으로 사용되는 사용자 정의 데이터 타입을 정의한다.

/******************************************************
* 기본형
******************************************************/

CREATE DOMAIN _DOMAIN_NAME_ [AS] _데이터타입(SQL에서 지원하는 데이터 타입)_
    [DEFAULT _데이터를 입력하지 않았을떄 자동 입력값_]
    [CONSTRAINT _제약조건이름_ { NOT NULL | NULL | CHECK (표현식:TURE, FALSE, UNKNOW) } ]

/******************************************************
* 성별을 남, 여와 같이 정해진 문자 1개의 문자로 표현하는 도메인 SEX를 정의하는 SQL
******************************************************/

CREATE DOMAIN SEX CHAR(1)
    DEFAULT '-'
    CONSTRAINT VALID-SEX CHECK(VALUE IN ('-', '남', '여'));

/******************************************************
* 우편 번호 자료를 저장하는 테이블 만들기
* 기본값은 없다.
******************************************************/

CREATE DOMAIN us_postal_code TEXT
CHECK   (
            VALUE ~ '^\d{5}$' OR VALUE ~ '^\d{5}-\d{4}$'
        );

3. TABLE
CREATE 테이블에 모든 표기형식은 괄호에 들어가야 한다. 그리고 나서 ; 을 붙인다.
제약 조건의 이름과 제약조건의 정의는 붙어다닌다.

  • CONSTRAINT 제약조건_이름 CHECK (COFIATT < 400000)
/******************************************************
* 기본형
******************************************************/

CREATE TABLE _TABLE_NAME_
    (
        COFIATT1 INTEGER NOT NULL,
        COFIATT2 VARCHAR(10) DEFAULT "홍길동",
        COFIATT3 SEX NOT NULL,
        COFIATT4 us_postal_code NOT NULL,
        COFIATT5 DATE,
        ...
        PRIMARY KEY(_기본키로 사용할 COFIATT_)
        UNIQUE (_대체키로 사용할 COFIATT_)
        FOREIGN KEY(_왜래키로 사용할 COFIATT_)
            REFERENCES _참조테이블_(기본키COFIATT, ...)
            [ON DELETE {CASCADE, SET NULL, SET DEFAULT}]
            [ON UPDATE {CASCADE, SET NULL, SET DEFAULT}]
        [CONSTRAINT _제약조건명_]
        [CHECK (조건식)]
    )

/******************************************************
* 제약 조건
******************************************************/
ON DELETE {CASCADE, SET NULL, SET DEFAULT};
ON UPDATE {CASCADE, SET NULL, SET DEFAULT};

___ NOT NULL,
___ UNIQUE,
___ DEFAULT '_VALUE_',

CONSTRAINT 제약조건_이름
    CHECK (COFIATT < 400000),
CONSTRAINT 제약조건_이름
    CHECK (COFIATT IN (1,2,3,4)) 

/******************************************************
* 다양한 예시
******************************************************/

CREATE TABLE EMPLOYEE
    (
        EMPNO   INTEGER NOT NULL,
        EMPNAME CHAR(10),
        TITLE   CHAR(10),
        MANAGER INTEGER,
        SALARY  INTEGER,
        DNO     INTEGER,
        PRIMARY KEY (EMPNO),
        FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DEPTNO)
    );

CREATE TABLE DEPARTMENT
    (
        DEPTNO      INTEGER NOT NULL, 
        DEPTNAME    CHAR(10), 
        FLOOP       INTEGER, 
        PRIMARY KEY (DEPTNO)
    );

/******************************************************
* 이름, 학번, 전공, 성별, 생년월일로 구성된 <학생> 테이블 정의
    *   이름 : NOT NULL
        학번 : 기본키
        전공 : <학과> 테이블에 학과 코드를 참조하는 외래키
                학과 테이블에서 삭제가 일어나면 전공값을 NULL
                학과 코드가 변경되면 전공 값도 전공값도 같은값으로 변한다
        성별 : SEX 도메인 사용
        생년월일 1980-01-01 이후 데이터만 저장 가능하고, 제약 조건의 이름은 생년월일제약으로 
******************************************************/
CREATE TABLE 학생
    (
        이름 VARCHAR(7) NOT NULL, 
        학번 VARCHAR(8),
        전공 VARCHAR(8),
        성별 SEX,
        생년월일, DATE
        PRIMARY KEY(학번)
        FOREIGN KEY(전공) REFERENCES 학과(학과코드)
            ON DELETE SET NULL
            ON UPDATE CASCADE
        CONSTRAINT 생년월일제약
            CHECK (생년월일 >= '1980-01-01');
    );

4. VIEW

이름을 갖는 가상 테이블을 생성할 수 있다. 마치 테이블의 변수 저장하듯이 사용해보자

/******************************************************
* 기본형
******************************************************/
CREATE VIEW _VIEW_NAME_ AS 
    (
        SELECT FROM WHERE
    );

5. INDEX
테이블 행튜레의 검색 시간을 단축시키기위해 만든 보조적인 데이터 구조

/******************************************************
* 기본형
******************************************************/
CREATE [UNIQUE] INDEX _INDEXT_NAME_
ON _TABLE_NAME_(COFIATT1[ASC|DESC], COFIATT2[ASC|DESC], ...)

/******************************************************
* 몬스터 테이블에서 유니크한 특성을 갖는 몬스터ID를 가지고 오름차순 몬스터인덱스를 정의해라
******************************************************/

CREATE UNIQUE INDEX MONSTER_INDEX
ON MONSTER_TABLE (MONSTER_ID ASC);

2. ALTER

1. TABLE
테이블의 COFIATT을 추가하거나 삭제한다.
혹은 COFIATT의 옵션을 바꿀때 사용한다,{NOT NULL, SET DEFAULT, SET NULL}

ALTER TABLE EMPLOYEE ADD PHONE CHAR(13);

ALTER TABLE EMPLOYEE DROP COLUMN COFIATT [CASCADE];

ALTER TABLE EMPLOYEE ALTER COFIATT [SET DEFAULT '기본값']

3. DROP

DROP SCHEMA _SCHEMA_NAME_ [CASCADE | RESTRICT]
DROP DOMAIN _DOMAIN_NAME_ [CASCADE | RESTRICT]
DROP TABLE _TABLE_NAME_ [CASCADE | RESTRICT]
DROP VIEW _VIEW_NAME_ [CASCADE | RESTRICT]
DROP INDEX _INDEX_NAME_ [CASCADE | RESTRICT]
DROP CONSTRAINT _제약조건명_

참조

  1. https://starrykss.tistory.com/1640
  2. https://www.postgresql.kr/docs/10/sql-createdomain.html
  3. https://www.w3schools.com/sql/sql_create_table.asp
저작자표시 (새창열림)

'CS > DB' 카테고리의 다른 글

| 니앙팽이 - DB | 9 | SQL - DCL(데이터 제어어)  (0) 2023.09.14
| 니앙팽이 - DB | 8 | SQL - DML(데이터 조작어)  (0) 2023.09.14
| 니앙팽이 - DB | 6 | 조인 (내부, 외부)  (0) 2023.09.14
| 니앙팽이 - DB | 5 | 관계형 DBMS & 데이터 무결성  (0) 2023.09.08
| 니앙팽이 - DB | 4 | DB 시스템 개요  (0) 2023.09.07
'CS/DB' 카테고리의 다른 글
  • | 니앙팽이 - DB | 9 | SQL - DCL(데이터 제어어)
  • | 니앙팽이 - DB | 8 | SQL - DML(데이터 조작어)
  • | 니앙팽이 - DB | 6 | 조인 (내부, 외부)
  • | 니앙팽이 - DB | 5 | 관계형 DBMS & 데이터 무결성
니앙팽이
니앙팽이
  • 니앙팽이
    니앙팽이 블로그
    니앙팽이
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • 그림그리기 (7)
      • 음악 (4)
        • FL Studio & MIDI (2)
        • 자작곡 (2)
      • 게임 (7)
        • 모바일 (0)
        • 스팀 (0)
        • 닌텐도 (0)
        • 개발 (7)
      • CS (44)
        • SW 공학 (27)
        • DB (7)
        • OS (9)
        • 네트워크 (1)
      • 팁 (9)
      • Language (21)
        • C# (8)
        • C&C++ (3)
        • 파이썬 메모 (3)
        • Javascript (7)
      • PS (0)
        • 알고리즘 (24)
        • 자료구조 (8)
        • 수학 (1)
        • 선형대수 (0)
        • 오토마타 (1)
        • 이산수학 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c#
    클립 스튜디오
    유니티
    알고리즘
    clip studio paint
    파이썬
    프로세스
    그림 연습
    객체지향개발
    노마드 코더
    따라그리기
    프로그래머스
    가비지 콜렉터
    디자인패턴
    unity
    자료구조
    Stack
    연결리스트
    Javascript
    KAKAO
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
니앙팽이
| 니앙팽이 - DB | 7 | SQL - DDL(데이터 정의어)
상단으로

티스토리툴바