Jin's Dev Story

[SQLD] 2과목 – 3. 관리 구문 본문

자격증 & 공부/SQLD

[SQLD] 2과목 – 3. 관리 구문

woojin._. 2024. 5. 16. 14:23

[ 2과목 – 3. 관리 구문 ]

 * DML
   - Data Manipulation Language란 의미로 데이터를 입력하고, 입력된 데이터를 수정, 삭제, 조회하는 명령어
   - DML 명령서 사용 후 별도의 COMMIT 명령어를 실행시켜야만 데이터가 반영되고 ROLLBACK이 가능

 * DML 종류
    (1) INSERT
      - 테이블에 데이터를 입력하는 명령어. 입력할 데이터가 컬럼의 데이터 타입과 맞지 않을 경우 묵시적으로 
        형변환을 한 후 입력
      - 만약 형변환을 해도 데이터 타입에 안 맞을 경우 에러가 발생
        INSERT INTO 테이블명(컬럼1, 컬럼2, ...) VALUES (데이터1, 데이터2, ...)

    (2) UPDATE
      - WHERE절을 사용해 이미 저장된 특정 데이터를 수정하고 싶을 때 사용하는 명령어
      - 수정하고 싶은 컬럼이 많으면 SET절에 ,(콤마)로 컬럼을 이어서 사용
        (SET 컬럼명1 = 데이터, 컬럼명2 = 데이터, ...)

    (3) DELETE
      - WHERE절을 사용해 이미 저장된 특정 데이터를 삭제할 때 사용하는 명령어
      - 테이블 전체 데이터를 삭제할 때 TRUNCATE 명령어가 시스템 부하 측면에서 유리하지만 ROLLBACK은 
        불가능(DELETE는 COMMIT 전 ROLLBACK 가능)


    (4) MERGE
      - 테이블에 새로운 데이터를 입력하거나 이미 저장되어 있는 데이터의 변경 작업을 한 번에 할 수 있는 명령어

MERGE
INTO 타깃 테이블명
USING 비교 테이블명
ON 조건
WHEN MATCHED THEN
UPDATE SET 컬럼명1 = 새로운 데이터, 컬럼명2 = 새로운 데이터, ...
WHEN NOT MATCHED THEN
INSERT (컬럼명1, 컬럼명2, ...)
VALUES(데이터1, 데이터2, ...)


 * 와일드카드
   - * : 모든
   - % : 모든
   - - : 한 글자

 * TCL
   - 트랜잭션을 제어하는 명령어로 트랜잭션은 더 이상 쪼개질 수 없고 한 그룹으로 묶이는 논리적인 업무 단위

 * 트랜잭션의 특징
   (1) 원자성
    - 트랜잭션으로 묶인 일련의 동작들은 모두 성공해야 하거나 실패해야 함
   (2) 일관성
    - 트랜잭션이 완료된 후에도 데이터베이스가 가진 데이터에 일관성이 있어야 함
   (3) 고립성
    - 한 번에 하나의 트랜잭션만 수행 가능함. 다른 트랜잭션이 수행 중이면 그 트랜잭션이 끝나고 나서 수행 가능
   (4) 지속성
    - 트랜잭션이 성공적으로 수행이 되면 모든 트랜잭션이 로그에 남겨진 뒤 COMMIT 되어야 함

 * TCP 종류
   (1) COMMIT
    - 데이터 입력, 삭제, 수정 후 변경된 내용을 최종적으로 데이터 파일에 저장하는 명령어
    - COMMIT 하지 않으면 휘발성인 메모리에만 저장하기 때문에 변경된 사항이 사라질 수 있고 다른 사용자가 
      변경된 데이터를 조회할 수 없음
   (2) ROLLBACK
    - 변경된 사항을 취소하는 명령어로 ROLLBACK하면 변경하기 이전 데이터로 복구됨
   (3) SAVEPOINT
    - ROLLBACK 뒤에 특정 SAVEPOINT를 지정하면 그 지점까지만 이전 데이터로 복구함

 * DDL
   - Data Definition Language란 의미로 데이터를 정의하고 테이블 안에 들어갈 데이터의 유형도 같이 정의=
   - 묵시적으로 동시에 COMMIT이 사용됨

 * DDL 데이터 유형
   (1) 문자
    - CHAR : 크기가 정의된 만큼 고정이고 빈 공간을 문자로 인식하지 않음
    - VARCHAR : 크기가 정의된 것보다 작을 수 있고 빈 공간을 문자로 인식함
    - CLOB
   (2) 숫자 - NUMBER
   (3) 날짜 – DATE

 * DDL 종류
   (1) CREATE
    - 테이블을 생성하는 명령어
    - CREATE TABLE 테이블명 (컬럼명1 데이터 타입(DEFAULT / NULL / NOT NULL), ...);
    - CREATE TABLE 테이블명 AS SELECT * FROM 복사할 테이블명 (테이블 복사해서 생성)

 * 테이블 생성 규칙
  ㉮ 각 컬럼들은 ,로 구분되고 ;로 끝난다.
  ㉯ 한 테이블 내에서 컬럼명은 고유해야 한다. 컬럼명은 중복될 수 없다.
  ㉰ 컬럼명 뒤에 데이터 유형과 크기가 명시되어야 한다.
  ㉱ 테이블명과 컬럼명은 숫자로 시작할 수 없다. 반드시 문자로 시작해야 한다.
  ㉲ A-Z, a-z, 0-9, _, $, #만 가능

 * 테이블 제약 조건(CONSTRAINT)의 종류
    - 테이블에 저장될 데이터의 무결성을 유지하기 위한 것
      ㉮ PRIMARY KEY(PK) 
        : 테이블에 하나씩만 정의할 수 있으며 PK로 지정된 컬럼에는 NULL값을 입력할 수 없고 UNIQUE 인덱스로 생성
      ㉯ FOREIGN KEY(FK) 
        : 하나의 테이블이 다른 테이블을 참조하고자 할 때 FK를 정의, NULL 값 가능, 여러 속성 가능
      ㉰ UNIQUE KEY (고유키)
        : PK와 유사하지만 NULL값을 입력할 수 있음
      ㉱ NOT NULL 
        : 해당 컬럼에 NULL값을 입력할 수 없음
      ㉲ CHECK 
        : 컬럼에 저장될 수 있는 값의 범위를 제한

   (2) ALTER
    - 테이블의 구조를 변경할 때 사용함
      ㉮ ADD COLUMN 
        : 새로운 컬럼을 추가할 때 사용되며 추가되는 위치는 맨 끝이며 추가될 위치를 바꿀 수 없다.
          - ALTER TABLE 테이블명 ADD 컬럼명 데이터 유형;
      ㉯ DROP COLUMN 
        : 기존에 있는 컬럼을 삭제하는 명령어로 한 번 삭제하면 복구할 수 없다.
          - ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
      ㉰ MODIFY COLUMN 
        : 컬럼을 변경할 때 사용되며 컬럼의 데이터 유형, DEFAULT값, NOT NULL 제약조건도 변경 가능
        : 컬럼의 크기를 줄일 때는 컬럼의 모든 데이터가 줄어든 컬럼의 크기보다 작아야 함
        : 컬럼에 저장된 데이터가 없을 때만 변경 가능하고 현재 NULL값이 저장되어 있지 않은 컬럼에만 NOT NULL 
         제약조건 추가가 가능
        : DEFAULT 변경 시 변경 이후 저장되는 데이터에만 적용됨 
          - ALTER TABLE 테이블명 MODIFY (컬럼명1 데이터 유형 [DEFAULT 값][NOT NULL], ...);
      ㉱ RENAME COLUMN 
        : 기존의 컬럼 이름 변경
          - ALTER TABLE 테이블명 RENAME COLUMN 변경할 컬럼명 TO 변경할 이름;
      ㉲ ADD CONSTRAINT 
        : 제약조건 추가 
          - ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(컬럼명);

      ㉳ DROP TABLE 
        : 테이블을 삭제할 때 사용하며 만약 다른 테이블이 해당 테이블을 참조하고 있을 경우 
         CASCADE CONSTRAINT를 사용해야만 삭제가 됨
          - TABLE 테이블명 [CASCADE CONSTRAINT];
      ㉴ TRUNCATE TABLE 
        : 테이블의 모든 데이터를 제거하고 ROLLBACK이 불가능하다. 사용 공간이 재사용되도록 초기화됨
        : 테이블을 삭제하지는 않음
          - TRUNCATE TABLE 테이블명;

 * DCL
   - Data Control Language란 의미로 USER를 생성하고 USER에게 데이터를 다룰 수 있는 권한을 부여하거나 
     회수하는 명령어

 * DCL 종류
   (1) USER 관련 명령어
     - CREATE USER
         : 사용자를 생성
         : CREATE USER 사용자명 IDENTIFIED BY 패스워드;
     - ALTER USER
         : 사용자를 변경
         : ALTER USER 사용자명 IDENTIFIED BY 패스워드;
     - DROP USER
         : 사용자를 삭제
         : DROP USER 사용자명
   (2) 권한 관련 명령어
     - GRANT
         : 사용자에게 권한을 부여
         : GRANT 권한 TO 사용자명;
     - REVOKE
         : 사용자를 변경
         : REVOKE 권한 FROM 사용자명;
   (3) ROLE 관련 명령어
     - ROLE이란 특정 권한들을 하나의 그룹으로 묶는 것과 동일
     - CREATE ROLE 롤명 : ROLE을 생성
     - GRANT 권한 TO USER : ROLE에 권한 부여
     - GRANT 롤명 TO 사용자명 : 사용자를 삭제