DML (Data Manipulation Language)

  • ADD new rows
  • Modify existing rows
  • Remove existing rows

1. INSERT

  • 묵시적 방법
    • 컬림 이름, 순서 지정하지 않음, 테이블 생성시 정의한 순서에 따라 값 지정
INSERT INTO author
VALUES (1, '박경리', '토지 작가');
INSERT INTO author
VALUES (1, default, '토지 작가');
  • 명시적 방법
    • 컬럼 이름 명시적 사용. 지정되지 않은 컬럼 NULL 자동 입력
INSERT INTO author (author_id, author_name)
VALUES (2, '이문열')
  • Subquery 이용
    • 타 테이블로부터 데이터 복사(테이블은 이미 존재하여야 함)
    • CREATE TABLE AS SELECT는 없는 테이블을 생성하고 데이터 복사
INSERT INTO department_usa
	SELECT department_id, department_name
	FROM deptments
	WHERE department_name='IT';

2. UPDATE

  • 조건을 만족하는 레코드를 변경
UPDATE emp
SET sal = sal+100, comm=0
WHERE deptno=10;
  • WHERE 절이 생략되면 모든 레코드에 적용
    • 모든 직원의 월급 10%인상
UPDATE emp
SET sal = sal*1.1
  • Subquery를 이용한 변경
    • 담당업무가 ‘SCOTT’과 같은 사람들의 월급을 부서 최고액으로 변경
UPDATE emp
SET sal = (SELECT MAX(sal) FROM emp)
WHERE job=(SELECT job FROM emp WHERE ename='SCOTT');

3. DELETE

  • 조건을 만족하는 레코드 삭제
    • 이름이 ‘SCOTT인 사원 삭제’
DELETE FROM emp
WHERE ename = 'SCOTT';
  • 조건이 없으면 모든 레코드 삭제
    • 모든 직원 정보 삭제
DELETE FROM emp;
  • Subquery를 이용한 DELETE
DELETE FROM emp
WHERE deptno = (SELECT deptno from dept
               WHERE dname='SALES')

4. Rollback & COMMIT

  • INSERT, UPDATE, DELETE 수행시 Rollback Segment에 저장된 상태이기 때문에 Rollback으로 되돌리거나 COMMIT으로 확정할 수 있음

5. 참고

  • 데이터 입력, 수정시 자주 사용되는 Pseudo 컬럼
    • User: Current user name
    • SYSDATE: current date and time
    • ROWID: Location information of rows
INSERT INTO emp(eno, hiredate)
VALUES (200, SYSDATE);
  • DEFAULT: default 값이 정의된 컬럼에 기본 값을 입력할 경우 사용할 수 있음
INSERT INTO book VALUES (200, 'Gems', DEFAULT)
  • DELETE와 TRUNCATE의 차이점
    • Delete는 Rollback 가능 but 대량의 log 등을 유발하므로 TRUNCATE보다 느림
  • 모든 DML문은 Integrity Constraint를 어길 경우 에러 발생