DB - SQL 분류(DDL,DML,DCL)

윤지영·2024년 3월 25일

1. 데이터 정의어

DDL - Data Definition Language

CREATE, ALTER, DROP, TRUNCATE
데이터 구조를 정의하는데 사용되는 명령
스키마, 도메인, 테이블, 뷰, 인덱스를 정의, 변경, 삭제

  • 1) CREATE : 스키마, 도메인, 테이블, 뷰, 인덱스를 정의

    CREATE SCHEMA {스키마_명} AUTHORIZATION {사용자_ID};
    • 프로시저 생성

      CREATE PROCEDURE 프로시저명(파라미터)
      (변수1 IN 변수타입, 변수2 OUT 변수타입, 변수3 IN OUT 변수타입...)
      
      IS
      	변수처리부
      BEGIN
      	처리내용
      EXCEPTION
      	예외처리부
      END;
      
      
    • 트리거 생성
      * 실행시기 : BEFORE(이벤트 전),AFTER(이벤트 후)

      CREATE TRIGGER 트리거명(실행시기)(옵션) ON 테이블명  
      BEGIN
      	트리거 BODY
      END;
  • 2) ALTER : 테이블에 대한 정의(형식)을 변경하는데 사용

    • 속성 추가, 변경, 삭제 : ADD, MODIFY, DROP COLUMN

      // 회원 테이블에 AGE 속성 추가
      ALTER TABLE 회원 ADD AGE ;

      // 회원 테이블에 AGE 속성 INT로 변경
      ALTER TABLE 회원 MODIFY ** INT(11)

      // 회원 테이블에 AGE 속성 삭제
      ALTER TABLE 회원 DROP COLUMN AGE;

    • INDEX 변경, 재구성, 비활성화 : RENAME TO, REBUILD, UNUSABLE

      // 회원명 INDEX를 성명으로 변경
      ALTER INDEX 회원명 RENAME TO 성명

      // 회원명 INDEX의 속도가 저하되거나 깨졌을 경우 INDEX 재구성
      ALTER INDEX 회원명 REBUILD

      // 회원명 INDEX 비활성화
      ALTER INDEX 회원명 UNUSABLE

  • 3) DROP : 스키마, 도메인, 테이블, 뷰, 인덱스 구조 자체를 삭제

    각각의 DROP 구문 뒤에는 CASCADE 또는 RESTRICT 옵션을 선택적으로 사용할 수 있다.

    • CASCADE: 지정된 객체를 삭제하고, 그에 의존하는 모든 객체도 함께 삭제

    • RESTRICT: 의존하는 다른 객체가 있을 경우 삭제를 거부

       DROP SCHEMA 스키마_명 CASCADE;
        DROP TABLE 테이블_명 RESTRICT;
        DROP VIEW USER_VIEW CASCADE;
        DROP INDEX USER_INDEX RESTRICT;
  • 4) TRUNCATE : 데이터베이스 구조는 유지한 채 내용을 삭제(초기화)

    TRUNCATE [TABLE] {테이블_명} ;

제약 조건 적용

  • PRIMARY KEY : 테이블의 기본키 정의
    • 기본으로 NOT NULL, UNIQUE 제약이 포함 (개체 무결성)
  • FOREIGN KEY : 외래키 정의
    • 참조 대상을 테이블이름(열이름)으로 명시
    • 참조 무결성 위배 상황 발생 시 처리 방법으로 옵션 지정 가능
    • FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE
      CASCADE;  
  • UNIQUE : 고유값 지정
    • 테이블 내에서 열은 유일한 값을 가져야 함.
    • 테이블 내에서 동일한 값을 가져서는 안 되는 항목에 지정.
    • USER_ID VARCHAR(10) UNIQUE NOT NULL   
  • NOT NULL : 테이블 내에서 관련 열의 값은 NULL일 수 없음
    • 필수 입력 항목에 대해 제약 조건으로 설정
    • USER_ID VARCHAR(10) NOT NULL 
  • CHECK : 개발자가 정의하는 제약 조건
    • 상황에 따라 다양한 조건 설정 가능
    • CONSTRAINT user_jumin CHECK(LENGTH(jumin)=13)

2. 데이터 조작어

DML - DATA Manipulation Language

SELECT, INSERT, UPDATE, DELETE
데이터를 관리(데이터 검색, 등록, 삭제, 수정)하는 명령

  • 1) SELECT : 데이터베이스에 있는 데이터 조회/검색
    SELECT 속성명 FROM 테이블명 [WHERE 조건]

    SELECT {속성_명} FROM {테이블_명};  
     ex) SELECT name FROM USER;  
    

    ❤ SELECT문 쿼리 순서

    SELECT 
      속성명
    /*  
      속성명, 속성명, 속성명	 
      *	
      DISTINCT 속성명 
      집계함수(속성명)
    */
    FROM 테이블명
    
    WHERE 조건
    # AND | OR | BETWEEN ~ AND | NOT | LIKE | IS NULL | IS NOT NULL
    
    GROUP BY
    HAVING 조건 집계함수(속성명)
    ORDER BY 속성 #ASC|DESC
    
  • 2) INSERT : 데이터베이스에 들어갈 데이터 추가
    INSERT INTO 테이블명 VALUES 데이터

    INSERT INTO {테이블_명}[(속성명1, 속성명2,)]
    VALUES(데이터1, 데이터2,);  
    ex) INSERT INTO user(name, birth) VALUES('jy','890212');
  • 3) UPDATE : 데이터베이스에 있는 데이터 수정
    UPDATE 테이블명 SET 속성명 = '데이터' [WHERE 조건]

    UPDATE {테이블_명}
    SET {속성명} = {데이터} [[,{속성명} = {데이터}],]
    [WHERE {조건}];
    ex) UPDATE user SET name='chuno' WHERE name='chu';
  • 4) DELETE : 데이터베이스에 있는 데이터 삭제
    DELETE FROM 테이블명 [WHERE 조건]

    DELETE FROM {테이블_명}[WHERE {조건}];   
     ex) DELETE FROM user WHERE name='jy';

3. 데이터 제어어

1) DCL - Data Control Language

GRANT, REVOKE
데이터베이스에 접근하고, 객체들을 사용하도록 권한을 주고 회수하는 명령

  • GRANT : 데이터베이스 사용자에게 사용 권한 부여

    권한
    SELECT,INSERT, UPDATE, DELETE, DROP, INDEX,
    REFERENCES(테이블의 특정 열을 외래키로 참조 할 수 있는 권한),
    ALL PRIVILEGES(테이블에 대한 모든 권한 부여)

    GRANT 권한 ON 테이블명 TO 유저
  • REVOKE : 데이터베이스 사용자에게 사용 권한 회수
    REVOKE 권한 ON 테이블명 FROM 유저

2) TCL - Transaction Control Language

COMMIT, ROLLBACK, SAVEPOINT
논리적인 작업의 단위를 묶어 이에 의해 조작된 결과를 작업 단위별로 제어하는 명령어

  • COMMIT : 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고 데이터베이스 조작 작업이 정상적으로 완료되었음을 알려줌
  • ROLLBACK : 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구
    ROLLBACK TO {세이브포인트_명}
      ex) ROLLBACK TO s1;     
  • SAVE POINT : 트랜젝션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어
     SAVE POINT {세이브포인트_명}
      ex) SAVE POINT S1;
profile
쑥쑥쑥쑥 레벨업🌱🌼🌳

0개의 댓글