포스트

10. DB정리

DML

  • INSERT

    1
    2
    3
    4
    5
    6
    7
    
      INSERT INTO '테이블명'('컬럼명1', '컬럼명2', ...)
      VALUES('값1', '값2', ...);
      -- 생성 컬럼 지정
        
      INSERT INTO '테이블명'
      VALUES('값1', '값2',...);
      -- 모든 컬럼에 값 입력
    
  • UPDATE

    1
    2
    3
    4
    5
    6
    7
    
      UPDATE '테이블명' SET '컬럼명' = '값'
      [WHERE '조건'];
      -- 조건이 없으면 해당 컬럼 전체 값 수정
        
      UPDATE '테이블명' SET '컬럼명1' = '값1', '컬럼명2' = '값2'
      [WHERE '조건'];
      -- 여러 컬럼 수정시 컴마(,)로 구분
    
  • DELETE

    1
    2
    3
    
      DELETE FROM '테이블명'
      WHERE '조건';
      -- 조건이 없으면 모든 행 삭제
    
    1
    2
    3
    4
    5
    
      TRUNCATE TABLE '테이블명';
      -- 테이블의 전체 행 삭제
      -- DML(x), DDL
      -- DELETE 보다 수행속도 빠름
      -- ROLLBACK을 통한 복구 불가
    

DDL

  • CREATE

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      CREATE TABLE '테이블명'(
        '컬럼명' '자료형'(`크기`) [DEFAULT '값']
        '컬럼명' '자료형'(`크기`)
        ...
      );
        
      CREATE TABLE '테이블명' AS SELECT * FROM '복사할 테이블';
      -- 기존 테이블 복사하며 테이블 생성
        
      CREATE TABLE '테이블명1' AS
      SELECT '컬럼명1' , '컬럼명2', '컬럼명3'
      FROM '테이블명2';
      -- SUBQUERY를 이용한 CREATE
    
  • COMMENT

    1
    
      COMMENT ON COLUMN '테이블명.컬럼명' IS '주석내용';
    
  • USER_TABLES

    1
    2
    3
    
      SELECT * FROM USER_TABLES;
      -- 사용자가 작성한 테이블을 확인 하는 뷰
      -- 데이터 딕셔너리에 저장
    
  • USER_CONSTRAINTS

    1
    2
    
      SELECT * FROM USER_CONSTRAINTS;
      -- 사용자가 작성한 제약조건을 확인하는 딕셔너리 뷰
    
  • CONSTRAINTS

    1
    2
    3
    4
    5
    6
    7
    
      CREATE TABLE USER_CONSTRAINTS(
        USER_NO NUMBER PRIMARY KEY,
        USER_ID VARCHAR2(30) UNIQUE,
        USER_PWD VARCHAR2(30) NOT NULL,
        GENDER VARCHAR2(10) CHECK ('컬럼명' '비교연산자' '비교값'),
        USER_GRADE NUMBER REFERENCES '참조할테이블명'
      );
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      CREATE TABLE USER_CONSTRAINTS(
        USER_NO NUMBER,
        USER_ID VARCHAR2(30),
        USER_PWD VARCHAR2(30) NOT NULL,
        GENDER VARCHAR2(10),
        USER_GRADE NUMBER,
        [CONSTRAINT USER_PK] PRIMARY KEY(USER_NO)
        [CONSTRAINT USER_UQ] UNIQUE(USER_ID)
        [CONSTRAINT GENDER_CH] CHECK(GENDER `비교연산자` '비교값')
        [CONSTRAINT USER_FK] FOREIGN KEY(USER_GRADE)
        REFERENCES '참조테이블명'
      );
    
    1
    2
    3
    4
    5
    6
    
      PRIMARY KEY
      -- 한테이블당 한개만 설정 가능
      -- 중복 및 NULL 허용하지 않음
      -- 테이블에 대한 식별자 역할
      `컬럼레벨` : [CONSTRAINT '제약조건명'] PRIMARY KEY
      `테이블레벨` : [CONSTRAINT '제약조건명'] PRIMARY KEY('컬럼명')
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      UNIQUE
      -- 입력값에 대해서 중복을 제한
      -- NULL은 중복 삽입 가능
      `컬럼레벨` : [CONSTRAINT '제약조건명'] UNIQUE
      `테이블레벨` : [CONSTRAINT '제약조건명'] UNIQUE('컬럼명')
        
      UNIQUE `복합키`
      -- 두개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약 조건을 설정
      -- 복합키는 지정된 모든 컬럼의 값이 같을 때 위배된다
      `테이블레벨` : [CONSTRAINT '제약조건명'] UNIQUE('컬럼명1', '컬럼명2')
    
    1
    2
    3
    
      NOT NULL
      -- 삽입 수정시 NULL 허용 하지 않음
      -- 컬럼레벨 : [CONSTRAINT 제약조건명] NOT NULL
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
      FOREIGN KEY
      -- 참조된 다른 테이블의 컬럼이 제공하는 값만 사용 가능
      -- 테이블 간의 관계가 형성
      -- 제공되는 값 + NULL을 사용할 수 있음
    
      `컬럼레벨` : [CONSTRAINT '제약조건명']
      REFERENCES '참조할테이블명' [('참조할컬럼')] ['삭제룰']
    
      `테이블레벨` : [CONSTRAINT '제약조건명'] FOREIGN KEY('컬럼명')
      REFERENCES '참조할테이블명' [('참조할컬럼')] ['삭제룰']
        
      -- [삭제룰]
      ON DELETE RESTPICTED
      `삭제 제한. 기본값`
    
      ON DELETE SET NULL
      `부모키 삭제시 자식키를 NULL로 변환`
    
      ON DELETE CASCADE
      `부모키 삭제시 자식키도 함께 삭제`
    
    1
    2
    3
    
      CHECK
      -- 주의할 점 : 비교값은 리터럴만 사용가능(변하는 값(x), 함수(x))
      [CONSTRAINT '제약조건명'] CHECK ('컬럼명' '비교연산자' '비교값')
    
  • ALTER

    1
    2
    3
    4
    5
    6
    7
    8
    
      -- [제약 조건(추가/삭제)]
        
      ALTER TABLE '테이블명' ADD [CONSTRAINT '제약조건명'] '제약조건'('지정할컬럼명')
      [REFERENCES '테이블명'[('컬럼명')]  `FK인 경우`
      -- 제약조건 추가
        
      ALTER TABLE '테이블명' DROP CONSTRAINT '제약조건명';
      -- 제약조건 삭제
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      -- [컬럼(추가/수정/삭제)]
        
      ALTER TABLE '테이블명' ADD('컬럼명' '데이터타입' [DEFAULT '값']);
      -- 컬럼 추가
        
      ALTER TABLE '테이블명' MODIFY '컬럼명' '데이터타입';
      ALTER TABLE '테이블명' MODIFY '컬럼명' DEFAULT '값';
      ALTER TABLE '테이블명' MODIFY '컬럼명' NOT NULL / NULL;
      -- 컬럼의 데이터타입, DEFAULT값, NULL/NOT NULL 수정
        
      ALTER TABLE '테이블명' DROP('삭제할 컬럼명')
      -- 컬럼 삭제. 최소 1개의 컬럼은 테이블에 존재해야 함
    
    1
    2
    3
    4
    5
    6
    
      -- [이름변경(컬럼명, 제약조건명, 테이블명)]
        
      ALTER TABLE '테이블명' RENAME COLUMN '컬럼명' TO '바꿀이름';
      ALTER TABLE '테이블명' RENAME CONSTRAINT '제약조건명' TO '바꿀이름';
      ALTER TABLE '테이블명' RENAME TO '바꿀이름';
      -- 컬럼명, 제약조건명, 테이블명 변경
    
  • DROP

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      DROP TABLE '테이블명' [CASCADE CONSTRAINTS];
      -- 테이블 삭제
        
      -- [관계된 테이블 삭제 방법]
      (1) `자식 → 부모 순으로 테이블 삭제`
    
      (2) ALTER TABLE '테이블명' DROP CONSTRAINT '제약조건명';
      `을 이용하여 제약조건 삭제 후, 부모 테이블 삭제`
    
      (3) DROP TABLE '테이블명' CASCADE CONSTRAINTS