데이터조작어DML : insert/update/delete구문

[]대괄호로 묶여져 있는 부분은 생략가능하다는 의미.

데이터조작어DML과 트랜잭션(Transaction)

데이터조작어DML

  • 테이블에 새로운 행 추가 = insert
  • 테이블의 기존 행 수정 = update
  • 테이블의 기존 행 삭제 = delete

트랜잭션(Transaction)

  • 아주 중요한 개념
  • 논리적인 작업 단위
  • 여러 DML(insert, update, delete)이 모여서 하나의 트랜잭션이 구성됨
  • DML 작업 후 commit, rollback으로 트랜잭션 종료해야함




insert구문

  • 컬럼명은 생략가능한다면 값은 기본컬럼순서대로 작성해야한다.
  • 문자리터럴은 작은따옴표안에 작성
  • sub쿼리가 있다면 괄호()를 생략해야한다. 있으면 안됨.
1
$ insert into 테이블명 [(컬럼명, 컬럼명, ...)] values (값, 값, ...)
  • insert가 끝난 상태는 저장된 상태가 아닌 임시데이터상태이다.
  • 따라서 트랜잭션을 통해 저장(commit)하든지 취소(rollback)하는 명령어를 입력해야지 변경된 데이터가 저장된다.
  • commit한 뒤에는 rollback할수없다.
  • 따라서 commit은 신중히!




update구문

  • update구문에서도 Subquery사용이 가능하다.
1
2
$ update 테이블명 set 컬럼명 = 값 [, 컬럼명 = 값, ...]
$ [where 조건];




delete구문

  • 행전체를 삭제.
  • 레코드값 하나(한 칸)를 삭제하고 싶다면 그건 update구문을 이용해야한다. delete가 아니다!
  • where절없는 경우, 테이블 전체가 삭제되는 거 아님. 테이블형태는 남고 안의 데이터가 다 삭제됨.
  • 만약 행 몇개 삭제할려고했는데 where절을 깜박해서 전체 데이터를 날렸다면? rollback하면 해결되지만 만약 commit을 해버렸다면?
    • Oracle Flashback기술을 이용해서 아주 가까운 과거 특정시점으로 DB를 되돌릴수있다.EX) 3분,10분
    • 모든 순간을 다 Flashback할 수는 없고 특정 조건들이 맞아야지만 가능하다. 그러니 commit은 항상 신중히!
    • 각 DBMS마다 Flashback기술이 있을 수도 있고 없을 수도 있다.
1
2
$ delete [from] 테이블명
$ [where 조건];