카테고리 없음

sql DML 과 TCL, Transaction과 Lock

boangod 2025. 9. 22. 20:32

 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 복원- 잠금 해