INSERT INTO <테이블> [(컬럼, 컬럼, ... )]
VALUES (값, 값, ...);
UPDATE 테이블
SET 컬럼 = 값, 컬럼 = 값, ...
[WHERE 조건];
- 행단 위. 여러 개 or 하나의 컬럼
- 특정 컬럼의 데이터를 변경할 수 있다
DELETE FROM 테이블
[WHERE 조건];
- 테이블의 데이터를 횡단 위로 삭제한다
COMMIT;
- 트랜잭션(단위 작업)
- COMMIT 하면 트랜잭션이 완료된다.
- 모든 명령은 즉시 동작한다
ROLLBACK;
- undo segment에 insert, delete 한 내용을 저장한다. ROLLBACK 하면 undo segment에 내용을
기반으로 명령을 취소한다
테이블에 데이터를 삭제하고 TCL을 통해 결과를 확인한다.
SQL> SELECT * FROM dept;
SQL> DELETE FROM dept;
SQL> SELECT * FROM dept;
SQL> ROLLBACK;
SQL> SELECT * FROM dept;
‐ DML 문은 반드시!! COMMIT이나 ROLLBACK을 사용해서 작업을 종료해야 한다.
SQL> DELETE FROM emp;
SQL> DELETE FROM dept;
SQL> COMMIT;
INSERT
• EMP 테이블에 아래제공된 값을 입력한다.
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
----- --------- --- ------- ----- ---------- ------- -------- -----
1001 문시현 남 모델링 1991/02/01 4500 520 10
1002 김주란 여 모델링 1992/03/03 4100 330 20
1003 양선호 남 모델링 1995/02/21 4300 30
SQL> ALTER SESSION SET nls_date_format='YYYY/MM/DD';
SQL> DESC emp;
SQL> INSERT INTO emp (eno, ename, sex, job, mgr, hdate, sal, comm, dno)
2 VALUES ('1001', '문시현', '남', '모델링', NULL, '1991/02/01', 4500, 520, '10');
ㄴ NULL은 NULL로 입력한다
SQL> INSERT INTO emp (eno, ename, sex, job, hdate, sal, comm, dno)
2 VALUES ('1002', '김주란', '여', '모델링', '1992/03/03', 4100, 330, '20');
ㄴ 컬럼을 지정하지 않고 값도 입력하지 않으면 NULL로 입력된다.
SQL> INSERT INTO emp
2 VALUES ('1003', '양선호', '남', '모델링', NULL, '1995/02/21', 4300, NULL, '30');
ㄴ 컬럼을 지정하지 않으면 테이블의 컬럼 순서대로 값을 입력해야 한다.
SQL> SELECT * FROM emp;
SQL> COMMIT;
INSERT와 날짜 입력
SQL> ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS';
SQL> INSERT INTO emp (eno, ename, hdate)
2 VALUES ('0001', '안영희', '2021/09/25:03:07:15');
SQL> INSERT INTO emp (eno, ename, hdate)
2 VALUES ('0202', '손하늘', '2021/09/25');
SQL> ALTER SESSION SET nls_date_format='YYYY/MM/DD';
SQL> INSERT INTO emp (eno, ename, hdate)
2 VALUES ('0201', '안영숙', '2021/09/25:03:07:15');
SQL> INSERT INTO emp (eno, ename, hdate)
2 VALUES ('0201', '안영숙', TO_DATE('2021/09/25:03:07:15','YYYY/MM/DD:HH24:MI:SS'));
‐ 날짜입력에는 터미널의 날짜형식에 따라 입력하는 것이 아니 라반드시TO_DATE 함수를 이용해서 날짜를 입력한다.
• 날짜데이터에 적용되는 년도와 나머지 DEFAULT 값을 확인한다.
SQL> ALTER SESSION SET nls_date_format='YYYY-MM-DD:HH24:MI:SS';
SQL> INSERT INTO emp (eno,hdate)
2 VALUES ('01', TO_DATE('2000', 'YYYY'));
SQL> INSERT INTO emp (eno,hdate)
2 VALUES ('02', TO_DATE('99', 'YY'));
SQL> INSERT INTO emp (eno,hdate)
2 VALUES ('03', TO_DATE('99', 'RR'));
SQL> INSERT INTO emp (eno,hdate)
2 VALUES ('04', sysdate); ← 05, TRUNC(sysdate)
ㄴ 보통 일자를 입력하는 컬럼은 데이터의 통일성을 위해 TRUNC 함수를 이용해 시분초를 0으로 세팅하는 것이 일반적
SQL> SELECT * FROM emp
2 WHERE eno IN ('01','02','03','04','05');
UPDATE, DELETE
• 김주란의 부서번호를 10번으로, 급여는 10% 인상한다
SQL> UPDATE emp SET dno = '10', sal = sal*1.1
2 WHERE ename = '김주란';
SQL> COMMIT;
• 10번 부서사원의 정보를 삭제한다.
SQL> DELETE FROM emp
2
WHERE dno = '10';
SQL> COMMIT;
Transaction과 Lock
트랜잭션(Tranction)
• 정의
‐ 반드시 함께 실행돼야 할 작업의 단위
• 특성
‐ 원자성(Aotomicity)
. 트랜잭션은 최소의 작업단 위로서 전체가 처리되거나 취소될 수 있지만 일부만 처리될 수 없다.
‐ 일관성(Consistency)
. 트랜잭션이 실행된 이후데이터베이스의무결성은 반드시 유지돼야 한다.
‐ 독립성(Isolation)
. 트랜잭션을 여러 개 동시에 실행하더라도 각각의 트랜잭션은서로 영향을 줄 수 없다.
. 즉 실행이 종료되지 않은 트랜잭션의 결과는 다른 트랜잭션에서 참조하는 것이 불가능하다.
‐ 영속성(Durability)
. 종료된 트랜잭션의 결과는 반드시 데이터베이스에 반영돼 야한다.
트랜잭션의 시작과 종료
• 시작
‐ 이전트랜잭션이 종료된 이후 DML(INSERT, UPDATE, DELETE) 문장이나 DDL(CREATE, ALTER, DROP, TRUNCATE), DCL(GRANT, REVOKE) 문장에 실행됐을 때시작된다.
• 종료
‐ COMMIT이나 ROLLBACK 명령이 실행될 때종료된다.
‐ DDL이나 DCL문장의 실행이 완료되면 자동으로 종료된다.
‐ 사용자의 정상종료 시에 종료된다.
‐ 데드락(Deadlock)이 걸리면 트랜잭션의 일부만 종료된다.
트랜잭션은 하나의 세션에서 단지 하나만 시작할 수 있으며 DML인 경우 반드시 COMMIT이나 ROLLBACK으로 종료하지만 DDL이나 DCL의 경우문장이 실행된 고난 후 자동으로 종료된다. 오라클은 SAVE POINT명령을 이용트랜잭션의 과정을 제어할 수 있다.
트랜잭션과 언두세그먼트(Undo segment)
트랜잭션과 DML 데이터
- INSERT 등의 DML 작업이 실행되면 즉시테이블에 적용된다
- 변경된 행에는 독점잠금(Exclusive lock )이 발생한다.
- 해당테이블에는 공유잠금(Share lock)이 발생한다.
- 트랜잭션이 종료되면 잠금이 해제된다.
UNDO SEGMENT
‐ 트랜잭션이 실행될때이전이미지를 저장한다.
‐ Rollback을 위해 트랜잭션이수행 되는 동안이 전정보를 저장한다.
세그먼트
‐ 물리적인 저장영역을 가진 오브젝트를 의미한다.
‐ 테이블, 인덱스 등 저장영역에 공간을 할당받는 오브젝트를 의미한다.
데이터 베이스에 데이터를 수정하는 순서
① undo segment 결정
② 5 undo seg에 저장
③ 7 테이블에 저장
④ 행에 독점 잠금
⑤ 테이블에 공유 잠금
----------------------
⑥ COMMIT : 7 영구저장- 잠금 해제
⑦ ROLLBACK : 5 복원- 잠금 해