Day31 Database

์›ฐ์น˜์Šคยท2022๋…„ 12์›” 5์ผ
0

22/12/05

๐Ÿ“Œ 7. ์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery)

๐Ÿ“‚๋‹ค์ค‘์ปฌ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ

: ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋ฉ”์ธ์ฟผ๋ฆฌ๋กœ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ
ย ย ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์ขŒ๋ณ€์—๋„ ๋‹ค์ค‘์ปฌ๋Ÿผ์„ ์ž‘์„ฑํ•ด์•ผ ํ•จ(์ขŒ๋ณ€๊ณผ ์šฐ๋ณ€์ด ์ง์ด ๋งž์•„์•ผ ํ•จ!)

  • (์˜ˆ์ œ) ๋‹ค์ค‘์ปฌ๋Ÿผ์„œ๋ธŒ์ฟผ๋ฆฌ + ๋‹ค์ค‘ํ–‰์„œ๋ธŒ์ฟผ๋ฆฌ


โœ ์ž๊ธฐ ์ž์‹ ์ด ๋งค๋‹ˆ์ €๊ฐ€ ์•„๋‹Œ ์ง์› ์ถœ๋ ฅํ•˜์‹œ์˜ค.

select last_name
from employees
where employee_id not in (select manager_id
							from employees);

โŒ [๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ์›์ธ? ] -- ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฒฐ๊ณผ๊ฐ€ 0๊ฐœ
: ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’๋ฆฌ์ŠคํŠธ์— null๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ,
ย ย ๋ฉ”์ธ์ฟผ๋ฆฌ์— and์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž ์‚ฌ์šฉ์‹œ ๋ฉ”์ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋„ null์ž„.

  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋งŒ ๋Œ๋ ค๋ณด์ž -> null๊ฐ’ ํ•˜๋‚˜ ์žˆ์Œ(์‚ฌ์žฅ์€ ๋งค๋‹ˆ์ €๊ฐ€ ์—†์Œ)
    -> null๊ฐ’๋•Œ๋ฌธ์— ๋‹ค ๊ฑธ๋ ค์„œ true๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์Œ.

โญ• [ํ•ด๊ฒฐ] ๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ์ธ ๊ฒฝ์šฐ ๋ฉ”์ธ์ฟผ๋ฆฌ์— and์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ,
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋˜๋Š” null๊ฐ’์„ ์ œ์™ธ์‹œ์ผœ์ค˜์•ผ ํ•จ.

select last_name
from employees
where employee_id not in (select manager_id
							from employees
                            where manager_id is not null); // 89๊ฐœ


โœ๏ธ <์—ฐ์Šต๋ฌธ์ œ>

  1. employees ํ…Œ์ด๋ธ”์—์„œ Abel๊ณผ ๋™์ผํ•œ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์˜ last_name๊ณผ hire_date๋ฅผ ์ถœ๋ ฅํ•˜๋˜ ๋น„๊ต์˜ ๋Œ€์ƒ์ธ Abel์€ ์ œ์™ธํ•˜์‹œ์˜ค.
  2. employees ํ…Œ์ด๋ธ”์—์„œ ํ‰๊ท  ์ด์ƒ์˜ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›๋“ค์˜ employee_id, last_name, salary๋ฅผ ์ถœ๋ ฅํ•˜๋˜ ๊ธ‰์—ฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•˜์‹œ์˜ค.
  3. employees ํ…Œ์ด๋ธ”์—์„œ last_name์— โ€˜uโ€™๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์›๊ณผ ๊ฐ™์€ ๋ถ€์„œ์— ๊ทผ๋ฌดํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์›์˜
    employee_id, last_name์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
  4. employees ํ…Œ์ด๋ธ”๊ณผ departments ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. location_id๊ฐ€ 1700์ธ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์˜ employee_id, last_name, department_id, job_id๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
  5. employees ํ…Œ์ด๋ธ”์—์„œ ํ‰๊ท  ์ด์ƒ์˜ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›์œผ๋ฉด์„œ last_name์— โ€˜uโ€™๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์›๊ณผ ๋™์ผ
    ํ•œ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์˜ employee_id, last_name, salary๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
  6. employees ํ…Œ์ด๋ธ”์—์„œ ๋ณธ์ธ์ด ๋งค๋‹ˆ์ €์˜ ์—ญํ• ์„ ํ•˜๋Š” ์‚ฌ์›๋“ค์˜ employee_id, last_name์„
    ์ถœ๋ ฅํ•˜์‹œ์˜ค.
  7. employees ํ…Œ์ด๋ธ”๊ณผ departments ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ง์›์ด ์†Œ์†๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋นˆ ๋ถ€์„œ์˜ department_id, department_name์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

๐Ÿ“Œ 8. ๋ฐ์ดํ„ฐ์กฐ์ž‘์–ด(DML)

  • <SQL๊ตฌ๋ฌธ์˜ ์œ ํ˜•>
    ๋ฐ์ดํ„ฐ์งˆ์˜์–ด(DQL) : select
    ๋ฐ์ดํ„ฐ์กฐ์ž‘์–ด(DML) : insert, update, delete
    ๋ฐ์ดํ„ฐ์ •์˜์–ด(DDL) : create, alter, drop, truncate
    ๋ฐ์ดํ„ฐ์ œ์–ด์–ด(DCL) : grant, revoke
    ํŠธ๋žœ์žญ์…˜์ œ์–ด์–ด(TCL) : commit, rollback, savepoint

๐Ÿ“‚ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… (insert)

: ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด

[๋ฌธ๋ฒ•] insert into ํ…Œ์ด๋ธ”๋ช… [(์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2, ์ปฌ๋Ÿผ๋ช…3, ...)]
ย ย ย ย ย ย ย ย ย values (๊ฐ’1, ๊ฐ’2, ๊ฐ’3, ... );

  • ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๋ช…์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋จ.
    ํ•˜์ง€๋งŒ ์ƒ๋žตํ–ˆ๋‹ค๋ฉด values์ ˆ์—์„œ ๊ฐ’๋ฆฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ปฌ๋Ÿผ๋ช…์„ ์ˆœ์„œ๋Œ€๋กœ ๋น ์ง์—†์ด ์ ์–ด์•ผํ•จ
desc departments;

select *
from departments;

๐Ÿ”น (insert ์˜ˆ์ œ1) insert ์ž‘์—…์‹œ ํ…Œ์ด๋ธ”๋ช… ๋’ค์— ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ ์ƒ๋žต์‹œ์—๋Š”
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  values์ ˆ์— ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ์ปฌ๋Ÿผ ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋“  ๊ฐ’์„ ๋‚˜์—ดํ•ด์•ผ ํ•จ.

insert into departments
values (280, 'Java', 108, 1700);

๐Ÿ”น (insert ์˜ˆ์ œ2) insert ์ž‘์—…์‹œ ํ…Œ์ด๋ธ”๋ช… ๋’ค์— ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ ๊ฒฝ์šฐ์—๋Š”
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  values์ ˆ์— ์ปฌ๋Ÿผ ์ˆœ์„œ, ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜๋ฅผ ๋งž์ถฐ์„œ ๊ฐ’ ๋‚˜์—ดํ•ด์•ผ ํ•จ.

insert into departments(DEPARTMENT_NAME, LOCATION_ID, MANAGER_ID, DEPARTMENT_ID)
values ('Java', 1700, 201, 290);

๐Ÿ”น (insert ์˜ˆ์ œ3) null๊ฐ’์„ ์•”์‹œ์ (์ž๋™)์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

insert into departments(department_id, department_name)
values (300, 'Mysql');

๐Ÿ”น (insert ์˜ˆ์ œ4) null๊ฐ’์„ ๋ช…์‹œ์ (์ˆ˜๋™)์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

insert into departments
values (310,'Oracle',null,null);

๐Ÿ”น (insert ์˜ˆ์ œ5) insert + ์„œ๋ธŒ์ฟผ๋ฆฌ(subquery)
ย ย ย ย ย  : ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…์ด๋ฏ€๋กœ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ–‰์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ’ป sales_reps ์˜ˆ์ œ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ

create table sales_reps
(id int, 
 name varchar(20),
 salary int,
 commission_pct double(20,2));
 
 desc sales_reps;
 
insert into sales_reps(id, name, salary, commission_pct)
	select employee_id, last_name, salary, commission_pct
	from employees
    where job_id like '%rep%';
    
select *
from sales_reps;

๐Ÿ”น (insert ์˜ˆ์ œ6) insert + ์„œ๋ธŒ์ฟผ๋ฆฌ(subquery)
ย ย ย ย ย  : employees ํ…Œ์ด๋ธ”๊ณผ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•œ copy_emp ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„,
ย ย ย ย ย ย ย ย employees ํ…Œ์ด๋ธ”์˜ 107๋ช…์˜ ์‚ฌ์› ์ •๋ณด๋ฅผ copy_emp ํ…Œ์ด๋ธ”์— ๋ณต์‚ฌํ•  ์˜ˆ์ •

๐Ÿ’ป copy_emp ํ…Œ์ด๋ธ” ์ƒ์„ฑ

create table copy_emp
as select*
	from employees
    where 1 = 2;
    
desc copy_emp;

select *
from copy_emp;

๐Ÿ’ป copy_emp ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ๋ณต์‚ฌํ•˜๊ธฐ
: copy_emp ํ…Œ์ด๋ธ”์— employees ํ…Œ์ด๋ธ”์— ์žˆ๋Š” 107๋ช…์˜ ์‚ฌ์› ์ •๋ณด ๋™์ผํ•˜๊ฒŒ ์‚ฝ์ž…ํ•˜๊ธฐ

insert into copy_emp
	select *
    from employees;
    
select*
from copy_emp;

๐Ÿ”น (insert ์˜ˆ์ œ7) ๋‹ค์ค‘ํ–‰ insert

insert into departments
values (320,'HTML',126,1700),
	   (330,'CSS',127,null);
select *
from departments;

๐Ÿ“‚๋ฐ์ดํ„ฐ ์ˆ˜์ • (update)

: ํ…Œ์ด๋ธ”์˜ ํŠน์ •ํ–‰์„ ์ˆ˜์ •ํ•˜๋Š” ๋ช…๋ น์–ด

[๋ฌธ๋ฒ•] update ํ…Œ์ด๋ธ”๋ช…
ย ย ย ย ย ย ย ย set ์ปฌ๋Ÿผ๋ช…1 = ๊ฐ’1[, ์ปฌ๋Ÿผ๋ช…2 = ๊ฐ’2, ...]
ย ย ย ย ย ย ย ย [where ์กฐ๊ฑด๋ฌธ];

๐Ÿ”ธ (update ์˜ˆ์ œ1)

update employees
set department_id = 50
where employee_id = 113;

select employee_id, last_name, department_id
from employees
where employee_id = 113;

-> ๋ณ€๊ฒฝ๋๋Š”์ง€ ํ™•์ธ (department_id : 100->50)

๐Ÿ”ธ (update ์˜ˆ์ œ2)

๐Ÿ’ฅ ์ž๋™์ปค๋ฐ‹ ํ•ด์ œํ•˜๊ธฐ : [Query] - [Auto-Commit Transactions] ์ฒดํฌ ํ•ด์ œ

  • where์ ˆ ์—†์ด updateํ•œ ๊ฒฐ๊ณผ ๋ชจ๋“ ํ–‰์ด ๋ณ€๊ฒฝ๋จ. (์ž‘์—…์„ ์‹ค์ˆ˜ํ•จ)
update copy_emp
set department_id = 110;
  • ์ž‘์—… ๊ฒฐ๊ณผ ํ™•์ธ(๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ž๋™์ €์žฅ ๊ธฐ๋Šฅ์ด ๊บผ์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ X)
select*
from copy_emp;
  • ์ž‘์—… ์ทจ์†Œํ•˜๊ธฐ
rollback;
  • ์ž‘์—… ์ทจ์†Œ ํ™•์ธ
select*
from copy_emp;

๐Ÿ’ฅ ์ž๋™์ปค๋ฐ‹ ์„ค์ •ํ•˜๊ธฐ : [Query] - [Auto-Commit Transactions] ์ฒดํฌํ•˜๊ธฐ

๐Ÿ”ธ (update ์˜ˆ์ œ3) update + ์„œ๋ธŒ์ฟผ๋ฆฌ(subquery)

: copy_emp ํ…Œ์ด๋ธ”์˜ 113๋ฒˆ ์‚ฌ์›์˜ job_id์™€ salary๋ฅผ employees ํ…Œ์ด๋ธ”์— ์žˆ๋Š”
ย ย 205๋ฒˆ ์‚ฌ์›์˜ job_id, salary์™€ ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…

update copy_emp
set job_id =(select job_id
			 from employees
             where employee_id = 205),		-- 205๋ฒˆ์˜ job_id ์ฐพ์•„ ์™€
	salary =(select salary
			 from employees
             where employee_id = 205) 		-- 205๋ฒˆ์˜ salary ์ฐพ์•„ ์™€
where employee_id = 113;

select employee_id, last_name, job_id, salary
from copy_emp
where employee_id = 113;

๐Ÿ”ธ (update ์˜ˆ์ œ4) update + ์„œ๋ธŒ์ฟผ๋ฆฌ(subquery)
ย ย ย ย ย location_id๊ฐ€ 1800์ธ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์˜ ๊ธ‰์—ฌ๋ฅผ 10% ์ธ์ƒํ•˜์‹œ์˜ค.

update copy_emp
set salary = salary * 1.1
where department_id = (select department_id
					   from departments
                       where location_id = 1800);

select employee_id, last_name, salary, department_id
from copy_emp
where department_id = (select department_id
					   from departments
                       where location_id = 1800);

๐Ÿ“‚ ๋ฐ์ดํ„ฐ ์‚ญ์ œ (delete)

: ํ…Œ์ด๋ธ”์˜ ํŠน์ •ํ–‰์„ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด

[๋ฌธ๋ฒ•] delete from ํ…Œ์ด๋ธ”๋ช…
ย ย ย ย ย ย ย ย [where ์กฐ๊ฑด๋ฌธ];
=> where์ ˆ ์ƒ๋žต ์‹œ! ๋ชจ๋“  ํ–‰์ด ์‚ญ์ œ๋˜๋Š” ๋ช…๋ น์–ด

๐Ÿ”น (delete ์˜ˆ์ œ1)

delete from departments
where department_name = 'html';

select*
from departments;

๐Ÿ”น (delete ์˜ˆ์ œ2)

๐Ÿ’ฅ ์ž๋™์ปค๋ฐ‹ ํ•ด์ œํ•˜๊ธฐ : [Query] - [Auto Commit] ์ฒดํฌ ํ•ด์ œ

<์„ธํŠธ>

delete from copy_emp;  -- where์ ˆ ์ƒ๋žต ์‹œ ๋ชจ๋“  ํ–‰ ์‚ญ์ œ๋จ.

select *
from copy_emp;   -- ์ž‘์—… ๊ฒฐ๊ณผ ํ™•์ธ(์ €์žฅ X, ๋ฏธ๋ฆฌ๋ณด๊ธฐ)

rollback;  -- ์ž‘์—… ์ทจ์†Œ

select *
from copy_emp;  -- ์ž‘์—… ์ทจ์†Œ ๊ฒฐ๊ณผ ํ™•์ธ

<์„ธํŠธ>

delete from copy_emp
where employee_id = 105;   -- ํŠน์ • ํ–‰ ์‚ญ์ œ

select *
from copy_emp
where employee_id = 105;  -- ์ž‘์—… ๊ฒฐ๊ณผ ํ™•์ธ(์ €์žฅ X, ๋ฏธ๋ฆฌ๋ณด๊ธฐ)

commit;   -- ์ž‘์—… ์ €์žฅ

๐Ÿ’ฅ ์ž๋™์ปค๋ฐ‹ ์„ค์ •ํ•˜๊ธฐ : [Query] - [Auto Commit] ์ฒดํฌ ์„ค์ •

๐Ÿ”น (delete ์˜ˆ์ œ3) delete + ์„œ๋ธŒ์ฟผ๋ฆฌ(subquery)

: copy_emp ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ location_id๊ฐ€ 1800์ธ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์„ ์‚ญ์ œ.

delete from copy_emp
where department_id = (select department_id
					   from departments
					   where location_id = 1800);

๐Ÿ’ป ๊ฒฐ๊ณผ ํ™•์ธ

select *
from copy_emp
where department_id = (select department_id
					   from departments
					   where location_id = 1800);


๐Ÿ“‚ ํŠธ๋žœ์žญ์…˜

ํŠธ๋žœ์žญ์…˜์ด๋ž€? ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ DML์ด ๋ชจ์—ฌ์„œ ๊ตฌ์„ฑ์ด ๋จ.

  • ํŠธ๋žœ์žญ์…˜์ œ์–ด์–ด(TCL) : commit(์ €์žฅ), rollback(์ทจ์†Œ), savepoint(์ €์žฅ์ )

-- ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ : ์ฒซ๋ฒˆ์งธ DML์ด ์‹คํ–‰๋ ๋•Œ
-- ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ : commit, rollback ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋ ๋•Œ

โ— DML(insert, update, delete) ๋ช…๋ น์–ด ํ•˜๋‚˜๊ฐ€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ž„!

[์ƒํ™ฉ1] Auto-Commit ์„ค์ •๋œ ์ƒํƒœ

(ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘) insert -----;
(ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ) (autocommit ๋ฐ”๋กœ ๋ฐœ์ƒ๋จ)
(ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘) update -----;
(ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ) (autocommit ๋ฐ”๋กœ ๋ฐœ์ƒ๋จ)

[์ƒํ™ฉ2] Auto-Commit ํ•ด์ œ๋œ ์ƒํƒœ

(ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘) insert -----;
              update -----;
              update -----;
(ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ) commit;
(ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘) delete -----;
              delete -----;
(ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ) rollback;

[์ƒํ™ฉ3] Auto-Commit ํ•ด์ œ๋œ ์ƒํƒœ

(ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘) insert -----;
              update -----;
              savepoint ํฌ์ธํŠธ๋ช…1; 
              update -----;       ==> ์ž‘์—…์„ ์‹ค์ˆ˜ํ•จ!
              savepoint ํฌ์ธํŠธ๋ช…2;
              delete -----;  
              rollback to ํฌ์ธํŠธ๋ช…1;
              ์ž‘์—… ๋‹ค์‹œํ•˜๊ธฐ
(ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ) commit;

0๊ฐœ์˜ ๋Œ“๊ธ€