• 테이블에 저장되어 있는 데이터를 다루는 명령어


1. INSERT 구문

  • 테이블에 새로운 행 추가

☑️ 문법

INSERT INTO table [(column [, column...])]
VALUES      (value [, value...]);

예제

INSERT INTO departments(department_name, namager_id, department_id, location_id)
VALUES      ('Java', 201, 290, 1700);
INSERT INTO departments(department_id, department_name)
VALUES      (300, 'Jsp');
  • 테이블명 다음에 설정한 컬럼수만큼 values에 값을 채워준다. 나머지는 자동으로 null값이 들어간다.

INSERT INTO departments
VALUES      (310, 'Web', null, null);
  • 아니면 null을 넣고 싶은 필드를 직접 지정해 줄 수도 있다.


2. UPDATE 구문

  • 테이블이 기존 행 수정

☑️ 문법

UPDATE table
SET    column = value [, column = value, ...]
[WHERE condition];

예제

UPDATE employees
SET    department_id = 50
WHERE  employee_id = 113;
  • 이렇게 쓰면 특정 row만 데이터 변경

UPDATE employees
SET    department_id = 50;
  • 이렇게 쓰면 해당 테이블 내의 모든 row의 데이터가 바뀐다. 이렇게 쓸 일은 거의 없으니까 UPDATE 사용시에는 WHERE 조건을 잘 확인하자.

UPDATE copy_emp
SET    job_id = (SELECT job_id
                 FROM   copy_emp
                 WHERE  employee_id = 205),
       salary = (SELECT salary
                 FROM   copy_emp
                 WHERE  employee_id = 205)
WHERE  employee_id = 113;
  • 수정할 데이터 구문에서 서브쿼리도 사용 가능


3. DELETE 구문

  • 테이블의 기존 행 삭제

☑️ 문법

DELETE [FROM] table
[WHERE        condition];

예제

DELETE FROM departments
WHERE       department_id = 60;
DELETE FROM copy_emp;
  • 이렇게 쓰면 전체 삭제


4. 트랜잭션(Transaction)

  • 논리적인 작업 단위
  • 여러 DML이 모여서 하나의 트랜잭션이 구성된다.
  • DML 작업을 통해 변경한 내용들은 모두 임시저장 되어 있는 상태이다.
  • 그래서 DML 작업 후 commit(DB에 작업내용 최종 저장), rollback(DB 최종 저장 전에 작업내용 되돌리기)으로 트랜잭션을 종료해야 한다.

4-1) 트랜잭션 구성

  • 여러 DML 구문이 하나의 트랜잭션 (select, insert, update, delete)
  • 하나의 DDL 구문이 하나의 트랜잭션 (create, alter, drop, truncate)
  • 하나의 DCL 구문이 하나의 트랜잭션 (grant, revoke)

4-2) 트랜잭션 시작 및 종료

🔸 시작

  • 첫 번째 DML 구문 실행 시

🔸 종료

  • COMMIT 또는 ROLLBACK 실행 시
    • DML 쓰다가 DDL/DCL 작성하면 autocommit 되면서 위에 썼던 DML도 같이 커밋된다.(트랜잭션 끝)
  • DDL 또는 DCL 구문 실행 시(autocommit)
    • DDLDCLautocommit을 내포하고 있기 때문에 실행하는 순간 commit되고 트랜잭션이 끝난다.
    • 그래서 rollback이 불가하기 때문에 신중하게 작업하는 것이 좋다.
  • SQL *PLUS 정상 종료 시(autocommit)
    • 그래픽창의 X를 눌러 끄는 것은 비정상 종료다.
    • 터미널에서 exit 명령어 입력이나 그래픽 툴의 exit 버튼을 눌러서 끄는 것이 정상 종료이다.
    • 비정상 종료 시 autorollback 처리된다.

🔸 SAVEPOINT와 ROLLBACK TO

  • 최종 commit 전에 작업하던 중간 중간으로 되돌아 갈 수 있도록 SAVEPOINT를 만들 수 있다.
  • 하지만 만든 세이브포인트를 확인할 수 있는 명령어는 없기 때문에 만든 사람이 기억하고 있어야 한다.
UPDATE...
SAVEPOINT update_done -- 세이브 포인트 생성

...

INSERT...
ROLLBACK TO update_done; -- 세이브 포인트로 되돌리기
  • 세이브 포인트를 만들었다고 그 전까지 했던 작업들이 COMMIT 되는 것은 아니다.
  • 그렇기 때문에 모든 DML 작업이 끝났다면 최종 확인 후 꼭 COMMIT을 해 주어야 한다.