[]대괄호로 묶여져 있는 부분은 생략가능하다는 의미.
데이터조작어DML과 트랜잭션(Transaction)
데이터조작어DML
- 테이블에 새로운 행 추가 = insert
- 테이블의 기존 행 수정 = update
- 테이블의 기존 행 삭제 = delete
- 아주 중요한 개념
- 논리적인 작업 단위
- 여러 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 조건];
|