๐Ÿ’ป IT/DB

CONCAT_WS()

๋‘˜ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์ด๋‚˜ ์ปฌ๋Ÿผ ๊ฐ’์„ ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ๋ถ„์ž๋ฅผ ๋„ฃ๊ณ  ์ˆœ์„œ๋Œ€๋กœ ํ•ฉ์ณ์„œ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. (NULL์„ ํฌํ•จํ•ด๋„ NULL๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

SELECT CONCAT_WS(๊ตฌ๋ถ„์ž, ๋ฌธ์ž์—ด1,๋ฌธ์ž์—ด2,๋ฌธ์ž์—ด3,,,)FROM ํ…Œ์ด๋ธ”๋ช…

# SELECT CONCAT_WS(',','AAA','BBB','CCC')
# ์ถœ๋ ฅ : AAA,BBB,CCC

 

 

RPAD, LPAD

์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ์— ํŠน์ • ๋ฌธ์ž๋ฅผ ์›ํ•˜๋Š” ์ž๋ฆฌ์ˆ˜ ๋งŒํผ ๋„ฃ๊ธฐ

SELECT LPAD('์›๋ณธ๋ฌธ์ž์—ด','์›ํ•˜๋Š”์ž๋ฆฌ์ˆ˜','์ฑ„์šธ๋ฌธ์ž์—ด')

# SELECT LPAD('ABC',5,'0')
# ๊ฒฐ๊ณผ : 00000ABC

 

 

COLLATE

Charater set์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ €์žฅํ• ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ’์ด๋‹ค
collation์€ ์ •ํ•ด์ง„ character set์— ์˜ํ•ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.
utf8mb4_general_ci : ์ •๋ ฌ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž๋ฅผ ์ •๋ ฌ๊ธฐ์ค€์—์„œ ์ œ์™ธํ•œ๋ฐฉ๋ฒ•

 

 

ROUND

๋ฐ˜์˜ฌ๋ฆผ

ROUND(์ˆ˜,๋ฐ˜์˜ฌ๋ฆผ์ž๋ฆฌ)

# ROUND(123.4567,2)
# ์ถœ๋ ฅ : 123.46

 

 

IFNULL

๊ฒ€์‚ฌํ•  ํ•„๋“œ๊ฐ€ null์ด๋ผ๋ฉด ๋Œ€์ฒดํ•  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์•„๋‹ˆ๋ฉด ํ•„๋“œ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

IFNULL(๊ฒ€์‚ฌํ• ์ปฌ๋Ÿผ๋ช…, ๋Œ€์ฒดํ• ๊ฐ’('null์ด๋‹ค!')

# IFNULL(AGE, ๋Œ€์ฒดํ• ๊ฐ’('null์ด๋‹ค!')
# AGE์ปฌ๋Ÿผ์ด null์ผ ๊ฒฝ์šฐ 'null์ด๋‹ค!' ๋ฐ˜ํ™˜

 

 

 

UNION ALL

์กฐ์ธ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘ํ•ฉ์‹œํ‚จ๋‹ค. ์ค‘๋ณต๋ฐ์ดํ„ฐ๋„ ํฌํ•จํ•˜์—ฌ ๊ฐ™์ด ์ถœ๋ ฅํ•œ๋‹ค. 
๋‹จ, ์กฐ์ธ์€ ์ปฌ๋Ÿผ์ด ์ถ”๊ฐ€๋˜๋Š” ํ˜•์‹์ด๊ณ (์˜†์œผ๋กœ์—ฐ๊ฒฐ), union์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ํ˜•์‹์ด๋‹ค(๋ฐ‘์œผ๋กœ ์—ฐ๊ฒฐ)

 

 

 

GROUP BY : ๊ฐ™์€ ์ปฌ๋Ÿผ์„ ๋ฌถ๋Š”๋‹ค.

HAVING์ ˆ : GROUP BY์ ˆ์—์„œ ์กฐ๊ฑด์„ ์ค„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

SELECT *
FROM SAMPLE_TABLE
WHERE ID = 'recording'
GROUP BY AGE,JOIN_DATE
HAVING COUNT(AGE)>=2; # ๋‚˜์ด๊ฐ€ 2์ด์ƒ์ธ ์ปฌ๋Ÿผ์˜ ์ˆ˜๋Ÿ‰์„ ๋ณด์—ฌ์ค€๋‹ค.

 


ORDER BY : ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. (์˜ค๋ฆ„์ฐจ์ˆœ)

 

 

 

WITH 

์„œ๋ธŒ์ฟผ๋ฆฌ

with ์ž„์˜์ด๋ฆ„ as (
	select ์ปฌ๋Ÿผ๋ช…
	from ํ…Œ์ด๋ธ”๋ช…
	where ์กฐ๊ฑด
)
select ์ปฌ๋Ÿผ๋ช…
from ์ž„์˜์ด๋ฆ„ 
where ์กฐ๊ฑด

 

 

 

SUBSTR

๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ์ž๋ฅธ๋‹ค

SUBSTR(๋ฌธ์ž์—ดstr, ์‹œ์ž‘์ง€์ , ๊ธธ์ด) 

# SUBSTR('์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ',1,3) 
# ๊ฒฐ๊ณผ: ์•ˆ๋…•ํ•˜

 

 

 

WHERE 1=1

ํ•ญ์ƒ ์ฐธ์ด๋‹ค, ์•„๋ฌด๋Ÿฐ ์กฐ๊ฑด ์—†์ด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฃผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์กฐ๊ฑด์ ˆ์—์„œ AND๋‚˜ OR ์กฐ๊ฑด์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

IF : ์กฐ๊ฑด๋ฌธ (MYSQL์‚ฌ์šฉ)

**์˜ค๋ผํด์—์„  DECODE๋กœ ์‚ฌ์šฉํ•œ๋‹ค. DECODE(์ปฌ๋Ÿผ, ๊ฐ’, '์กฐ๊ฑด์ด ์ผ์น˜ํ•  ๊ฒฝ์šฐ์˜ VALUE','์กฐ๊ฑด์ด ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์˜ VALUE')

IF(์กฐ๊ฑด,'์กฐ๊ฑด์ด ์ผ์น˜ํ•  ๊ฒฝ์šฐ์˜ VALUE','์กฐ๊ฑด์ด ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์˜ VALUE')
# IF(A.DDLN_YN = 'Y',B.EXPND_RSLTN_AMT,A.EXPND_RPT_AMT)

 

 

 

STR_TO_DATE()

ํ˜•์‹ ๋ฌธ์ž์—ด์— ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„๋ถ€๋ถ„์ด ๋ชจ๋‘ ํฌํ•จ๋œ ๊ฒฝ์šฐ DATETIME ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ

STR_TO_DATE('20240501', '%Y%m%d%H%i%s'); # ๋ฐ˜ํ™˜๊ฐ’ : 2024-05-01 10:35:02

 

 

 

MYSQL์—์„œ  NVL๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ : COALESCE ๋˜๋Š” IFNULL
COALESCE(A, 'A์˜ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์˜ ๊ฐ’')
IFNULL(A, 'A๊ฐ’์ด NULL์ธ ๊ฒฝ์šฐ์˜ ๊ฐ’')

 

 

 

ORACLE์—์„  TO_CHAR(ADD_MONTHS(TO_DATE(IN_INQIRE_STDR_YYMM, 'YYYY-MM'), -1), 'YYYY-MM')
MYSQL์—์„   DATE_FORMAT(DATE_SUB('2024-01',INTERVAL -1 MONTH),'%Y-%m')์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค

DATE_FORMAT('๋‚ ์งœ',ํ˜•์‹)
DATE_SUB("๋‚ ์งœ",INTERVAL -1(์ด์ „๋‹ฌ) OR 1(๋‹ค์Œ๋‹ฌ) MONTH)

 

 

 

OREDER BY 1,2

์ปฌ๋Ÿผ์˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•œ๋‹ค๋Š” ์˜๋ฏธ

SELECT AGE, NAME, GENDER
FROM ~~
ORDER BY 1,2 # =AGE,NAME์ด๋ž‘ ๊ฐ™์€ ๋œป์ด๋‹ค.

 

 

 

DECODE('์ปฌ๋Ÿผ','๊ฐ’','TRUE๊ฐ’','ELSE IF๊ฐ’','TRUE๊ฐ’','ELSE๊ฐ’')์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฑธ MYSQL์—์„œ ์‚ฌ์šฉ์‹œ์—๋Š”CASE WHEN๋ฌธ์œผ๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

CASE
    WHEN '์กฐ๊ฑด' THEN 'TRUE๊ฐ’'
    WHEN '์กฐ๊ฑด' THEN 'TRUE๊ฐ’'
    ELSE 'ELSE๊ฐ’'
END AS ์ด๋ฆ„

 

 

 

์…€๋ ‰ํŠธ ์˜ต์…˜ ์„ ํƒ์‹œ ๊ฐ’ (if๋ฌธ ํ™œ์šฉ)

<if test="searchSearch != null and !searchSearch.equals('')">   
	AND(#{searchSearch} = '1' AND SUBSTR(BG_YMD,1,4) LIKE CONCAT('%',#{searchVal},'%')   
	OR #{searchSearch} = '2' AND BIZ_NM LIKE CONCAT('%',#{searchVal},'%'))
</if>

-- <if test =๋งŒ์•ฝ searchSearch๊ฐ€ null์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ ๊ฐ’์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ฐ‘์— sql๋ฌธ์„ ์‹คํ–‰ํ•ด๋ผ>
-- ๋งŒ์•ฝ searchSearch๊ฐ’์ด 1์ด๋ฉด SUBSTR(BG_YMD,1,4) LIKE CONCAT('%',#{searchVal},'%') ์‹คํ–‰
-- ๋งŒ์•ฝ searchSearch๊ฐ’์ด 2์ด๋ฉด AND BIZ_NM LIKE CONCAT('%',#{searchVal},'%'))์‹คํ–‰

 

 

 

 

 

๊ธฐ๋ณธํ‚ค ์ƒ์„ฑ : 

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… add primary key (์—ด์ด๋ฆ„);

 

๊ธฐ๋ณธํ‚ค ์‚ญ์ œ :

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP PRIMARY KEY;

 

Auto-increament ์ถ”๊ฐ€ :

ALTER TABEL ํ…Œ์ด๋ธ”๋ช… MODIFY num INT NOT NULL AUTO_INCREMENT;

 

์™ธ๋ž˜ํ‚ค ์ถ”๊ฐ€ :

alter table ์ถ”๊ฐ€ํ•  ํ…Œ์ด๋ธ”๋ช… add constraint ์™œ๋ž˜ํ‚ค ์ด๋ฆ„ foreign key (์—ด ์ด๋ฆ„) REFERENCES ๊ฐ€์ ธ์˜ฌ ํ…Œ์ด๋ธ”(๊ฐ€์ ธ์˜ฌ์—ด);

 

์™ธ๋ž˜ํ‚ค ์‚ญ์ œ :

ALTER TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„ DROP FOREIGN KEY ์™ธ๋ž˜ํ‚ค์ด๋ฆ„;

 

ON DELETE CASCADE :

Alter table ์ž์‹ํ…Œ์ด๋ธ”
Add foreign key(์ž์‹ํ…Œ์ด๋ธ” ์™ธ๋ž˜ํ‚ค ์ปฌ๋Ÿผ)
References ๋ถ€๋ชจํ…Œ์ด๋ธ”(๋ถ€๋ชจํ…Œ์ด๋ธ” ์ฐธ์กฐํ•  ์ปฌ๋Ÿผ)
On delete cascade;

 

๋ฒ„์ „ ํ™•์ธ :

select version();

 

ํ…Œ์ด๋ธ” ์ƒ์„ฑ : 

create table db๋ช….table๋ช… (
	์ปฌ๋Ÿผ1 int primary key auto_increment, #๊ธฐ๋ณธํ‚ค+์ž๋™ ์ฆ๊ฐ€ ์„ค์ •
    ์ปฌ๋Ÿผ2 varchar(40) not null,
    ์ปฌ๋Ÿผ3 date,
    
    primary key(์ปฌ๋Ÿผ1),
    foreign key(์ปฌ๋Ÿผ2) references ๋‹ค๋ฅธํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผa) #๋‹ค๋ฅธ ํ…Œ์ด๋ธ” ์™ธ๋ž˜ํ‚ค ์ฐธ์กฐ
);

 

ํ…Œ์ด๋ธ” ์กฐํšŒ : 

select * from ํ…Œ์ด๋ธ”๋ช…  # *์€ ์ „์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
where ์กฐ๊ฑด ์„ค์ •  #์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
group by ์ปฌ๋Ÿผ๋ช…  #๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์ค€๋‹ค.
order by ์ปฌ๋Ÿผ๋ช… desc  #๋ฐ์ดํ„ฐ ์ •๋ ฌ desc๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ.

 

ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ : 

alter table ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช… rename ๋ฐ”๊ฟ€ํ…Œ์ด๋ธ”๋ช…;

 

ํ•„๋“œ ์ถ”๊ฐ€ : 

alter table ํ…Œ์ด๋ธ”๋ช… add ํ•„๋“œ๋ช… ํ•„๋“œํƒ€์ž…;

 

ํ•„๋“œ ์‚ญ์ œ :

alter table ํ…Œ์ด๋ธ”๋ช… drop ํ•„๋“œ๋ช…;

 

์กฐ์ธ :

select ์ปฌ๋Ÿผ๋ช… from ํ…Œ์ด๋ธ”1 join ํ…Œ์ด๋ธ”2 on ํ…Œ์ด๋ธ”1.์ปฌ๋Ÿผ = ํ…Œ์ด๋ธ”2.์ปฌ๋Ÿผ where ์กฐ๊ฑด

//์˜ˆ์ œ
select r.email,h.hotel_num,h.hotel_title,r.check_in,r.check_out
 from hotel_inform h
 join reserve_inform r
 on r.hotel_num = h.hotel_num
 where email="recorder@gmail.com";

 

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์„ค๊ณ„ ๊ณผ์ • ์ค‘ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐœ์ฒด(Entity)์™€ ๊ทธ๋“ค๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ถ”์ƒํ™” ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ ํ•˜๋Š” ๊ณผ์ •

 

 

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ƒ๋ช… ์ฃผ๊ธฐ 

1. ์š”๊ตฌ์‚ฌํ•ญ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„ : ์‚ฌ์šฉ์ž๋“ค์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋“ฃ๊ณ  ๋ถ„์„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ตฌ์ถ•์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ•œ๋‹ค.

2. ์„ค๊ณ„ : ๋ถ„์„๋œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ธฐ์ดˆ๋กœ ์ฃผ์š” ๊ฐœ๋…๊ณผ ์—…๋ฌด ํ”„๋กœ์„ธ์Šค ๋“ฑ์„ ์‹๋ณ„ํ•˜๊ณ  (1.๊ฐœ๋…์  ์„ค๊ณ„)

              ์‚ฌ์šฉํ•˜๋Š” ์ข…๋ฅ˜์— ๋งž๊ฒŒ ๋ณ€ํ™˜(2.๋…ผ๋ฆฌ์  ์„ค๊ณ„) ํ›„์—,

              ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋„์ถœ (3.๋ฌผ๋ฆฌ์  ์„ค๊ณ„)ํ•œ๋‹ค.

3. ๊ตฌํ˜„ : ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์‹ค์ œ DBMS์— ์ ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ๋ฐ ๊ด€๋ จ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.

4. ์šด์˜ : ๊ตฌํ˜„๋œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์†Œํ”„ํŠธ ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

5. ๊ฐ์‹œ ๋ฐ ๊ฐœ์„  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šด์˜์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด์˜ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•˜์—ฌ ๊ฐœ์„ ํ•œ๋‹ค.

 

 

 

๊ฐœ๋…์  ๋ชจ๋ธ๋ง (conceptual modeling)

- ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ์—…๋ฌด์˜ ํ•ต์‹ฌ์ ์ธ ๊ฐœ๋…์„ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ „์ฒด์ ์ธ ๋ผˆ๋Œ€๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • 

 

๋…ผ๋ฆฌ์  ๋ชจ๋ธ๋ง (logical modeling)

- ๊ฐœ๋…์  ๋ชจ๋ธ๋ง์—์„œ ๋งŒ๋“  ER๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” DBMS์— ๋งž๊ฒŒ ๋งคํ•‘ํ•˜์—ฌ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •

 

๋ฌผ๋ฆฌ์  ๋ชจ๋ธ๋ง (physical modeling)

- ์ž‘์„ฑ๋œ ๋…ผ๋ฆฌ์  ๋ชจ๋ธ์„ ์‹ค์ œ ์ปดํ“จํ„ฐ์˜ ์ €์žฅ ์žฅ์น˜์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •

 

 

 

 

DBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์˜ ๋‹จ์œ„

 
 

  • ํŠธ๋žœ์žญ์…˜์„ ์ •์˜ํ•˜๋Š” ์ด์œ 
    • DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ๋•Œ ์žฅ์• ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.
    • DB์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ž‘์—…์„ ์„œ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.

 

  • ํŠธ๋žœ์žญ์…˜์€ ์ „์ฒด๊ฐ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ๋˜๋Š” ์ „ํ˜€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. (all or nothing)
    ex) ์€ํ–‰ ์ด์ฒด ์—…๋ฌด
BEGIN  
1\. A๊ณ„์ขŒ์—์„œ 10,000์›์„ ์ธ์ถœํ•˜๋Š” UPDATE๋ฌธ  
2\. B๊ณ„์ขŒ์—์„œ 10,000์›์„ ์ž…๊ธˆํ•˜๋Š” UPDATE๋ฌธ  
END  

 
 

  • ํŠธ๋žœ์žญ์…˜์˜ ์ˆ˜ํ–‰ ๊ณผ์ •
  1. ํŠธ๋žœ์žญ์…˜ 1์„ ์ƒ์„ฑํ•œ๋‹ค
  2. ํŠธ๋žœ์žญ์…˜ 2๋ฅผ  ์ƒ์„ฑํ•œ๋‹ค
  3. T1์˜ ๊ฐ’์„ DB์—์„œ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๋ฒ„ํผ๋กœ ์ฝ์–ด์˜จ๋‹ค
  4. T2์˜ ๊ฐ’์„ DB์—์„œ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๋ฒ„ํผ๋กœ ์ฝ์–ด์˜จ๋‹ค
  5. T1์—์„œ ๋„์„œ ๊ฐ€๊ฒฝ์„ 7100์›์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค
  6. T2์—์„œ ๋„์„œ ๊ฐ€๊ฒฉ +100์› ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค
  7. T1๊ฐ’์„ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๋ฒ„ํผ์—์„œ DB์— ๊ธฐ๋กํ•œ๋‹ค (COMMIT) 
  8. T2๊ฐ’์„ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๋ฒ„ํผ์—์„œ DB์— ๊ธฐ๋กํ•œ๋‹ค (COMMIT)

 

  • ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ (ACID)
    • ์›์ž์„ฑ (Atomicity) : ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ์ž‘์—…์€ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค. all or nothing
    • ์ผ๊ด€์„ฑ (Consistency) : ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์ด๋‚˜ ํ›„๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค.
    • ๊ณ ๋ฆฝ์„ฑ (Isolation) : ์ˆ˜ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ผ์–ด๋“ค์–ด ๋ณ€๊ฒฝ ์ค‘์ธ ๋ฐ์ดํ„ฐ๊ฐ’์„ ํ›ผ์†ํ•˜๋Š” ์ผ์ด ์—†์–ด์•ผํ•œ๋‹ค.
    • ์ง€์†์„ฑ (Durability) : ์ˆ˜ํ–‰์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ•œ ํŠธ๋žœ์žญ์…˜์€ ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌํžˆ ์ €์žฅํ•ด์•ผํ•œ๋‹ค.

 

  • ๋™์‹œ์„ฑ ์ œ์–ด (concurrency control)
    • ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋  ๋•Œ, ์ผ๊ด€์„ฑ์„ ํ•ด์น˜์ง€ ์•Š๋„๋ก ํŠธ๋žœ์žญ์…˜์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” DBMS์˜ ๊ธฐ๋Šฅ 
์ƒํ™ฉํŠธ๋žœ์žญ์…˜1ํŠธ๋žœ์žญ์…˜2๋ฐœ์ƒ๋ฌธ์ œ๋™์‹œ ์ ‘๊ทผ
์ƒํ™ฉ1์ฝ๊ธฐ์ฝ๊ธฐ๋ฌธ์ œ ์—†์Œํ—ˆ์šฉ
์ƒํ™ฉ2์ฝ๊ธฐ์“ฐ๊ธฐ์˜ค์† ์ฝ๊ธฐ, ๋ฐ˜๋ณต ๋ถˆ๊ฐ€๋Šฅ ์ฝ๊ธฐ, ์œ ๋ น๋ฐ์ดํ„ฐ ์ฝ๊ธฐํ—ˆ์šฉ/๋ถˆ๊ฐ€ ์ค‘ ์„ ํƒ
์ƒํ™ฉ3์“ฐ๊ธฐ์“ฐ๊ธฐ๊ฐฑ์‹ ์†์‹ค(์ ˆ๋Œ€ ํ—ˆ์šฉํ•˜๋ฉด ์•ˆ ๋จ)ํ—ˆ์šฉ๋ถˆ๊ฐ€ (Lock์„ ์ด์šฉ)

 
 
 

  • ๊ฐฑ์‹  ์†์‹ค (lost update)
    • ๋‘๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ๊ฐฑ์‹ (update)ํ•  ๋•Œ ๋ฐœ์ƒ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋˜๋Š” ํ˜„์ƒ
    • T2์—์„œ ์ž˜๋ชป ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ T1์˜ ๊ฐฑ์‹  ์ž‘์—…์„ ๋ฌดํšจํ™” ํ•˜๊ณ  ๋ง์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.
      ์ด๋•Œ T1์—์„œ ๊ฐฑ์‹ ์†์‹ค ๋ฌธ์ œ ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

  • ๋ฝ(Lock)
    • ๊ฐฑ์‹ ์†์‹ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ƒ๋Œ€๋ฐฉ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์ด ํ•„์š”ํ•˜๋‹ค
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ • ์ค‘์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์˜ ์ž ๊ธˆ์žฅ์น˜์ด๋‹ค
    • ๊ณต์œ ๋ฝ (LS, shared lock) : ์ฝ๊ธฐ
      ๋ฐฐํƒ€๋ฝ (LX, exclusive lock) : ์ฝ๊ณ  ์“ฐ๊ธฐ
์š”์ฒญ / ์ƒํƒœLS ์ƒํƒœLX ์ƒํƒœ
LS ์š”์ฒญํ—ˆ์šฉ๋Œ€๊ธฐ
LX ์š”์ฒญ๋Œ€๊ธฐ๋Œ€๊ธฐ

 
 
 

+ Recent posts