๐ป IT/DB
-
์ผํ๋ฉด์ ๋ฐฐ์ด MYSQL ++๊ณ์ ์ถ๊ฐ2024.05.16
-
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง2024.02.26
-
ํธ๋์ญ์ (Transaction)2024.01.22
์ผํ๋ฉด์ ๋ฐฐ์ด MYSQL ++๊ณ์ ์ถ๊ฐ
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},'%'))์คํ
'๐ป IT > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
mariadb sql๋ฌธ (+์๊ฐ ๋ ๋ ๋ง๋ค ์ถ๊ฐ ์์ ) (0) | 2024.02.29 |
---|---|
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง (0) | 2024.02.26 |
ํธ๋์ญ์ (Transaction) (0) | 2024.01.22 |
mariadb sql๋ฌธ (+์๊ฐ ๋ ๋ ๋ง๋ค ์ถ๊ฐ ์์ )
๊ธฐ๋ณธํค ์์ฑ :
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";
'๐ป IT > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผํ๋ฉด์ ๋ฐฐ์ด MYSQL ++๊ณ์ ์ถ๊ฐ (0) | 2024.05.16 |
---|---|
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง (0) | 2024.02.26 |
ํธ๋์ญ์ (Transaction) (0) | 2024.01.22 |
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ค๊ณ ๊ณผ์ ์ค ํ์ค ์ธ๊ณ์ ๊ฐ์ฒด(Entity)์ ๊ทธ๋ค๊ฐ์ ๊ด๊ณ๋ฅผ ์ถ์ํ ํ์ฌ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ค๊ณ ํ๋ ๊ณผ์
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๋ช ์ฃผ๊ธฐ
1. ์๊ตฌ์ฌํญ ์์ง ๋ฐ ๋ถ์ : ์ฌ์ฉ์๋ค์ ์๊ตฌ์ฌํญ์ ๋ฃ๊ณ ๋ถ์ํ์ฌ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ตฌ์ถ์ ๋ฒ์๋ฅผ ์ ํ๋ค.
2. ์ค๊ณ : ๋ถ์๋ ์๊ตฌ์ฌํญ์ ๊ธฐ์ด๋ก ์ฃผ์ ๊ฐ๋ ๊ณผ ์ ๋ฌด ํ๋ก์ธ์ค ๋ฑ์ ์๋ณํ๊ณ (1.๊ฐ๋ ์ ์ค๊ณ)
์ฌ์ฉํ๋ ์ข ๋ฅ์ ๋ง๊ฒ ๋ณํ(2.๋ ผ๋ฆฌ์ ์ค๊ณ) ํ์,
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ๋์ถ (3.๋ฌผ๋ฆฌ์ ์ค๊ณ)ํ๋ค.
3. ๊ตฌํ : ์ค๊ณ ๋จ๊ณ์์ ์์ฑํ ์คํค๋ง๋ฅผ ์ค์ DBMS์ ์ ์ฉํ์ฌ ํ ์ด๋ธ ๋ฐ ๊ด๋ จ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
4. ์ด์ : ๊ตฌํ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํํธ ์จ์ด๋ฅผ ๊ตฌ์ถํ์ฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
5. ๊ฐ์ ๋ฐ ๊ฐ์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์์ ๋ฐ๋ฅธ ์์คํ ์ ๋ฌธ์ ๋ฅผ ๊ด์ฐฐํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด์ ๋ฌธ์ ์ ์ ํ์ ํ์ฌ ๊ฐ์ ํ๋ค.
๊ฐ๋ ์ ๋ชจ๋ธ๋ง (conceptual modeling)
- ์๊ตฌ ์ฌํญ์ ์์งํ๊ณ ๋ถ์ํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก ์ ๋ฌด์ ํต์ฌ์ ์ธ ๊ฐ๋ ์ ๊ตฌ๋ถํ๊ณ ์ ์ฒด์ ์ธ ๋ผ๋๋ฅผ ๋ง๋๋ ๊ณผ์
๋ ผ๋ฆฌ์ ๋ชจ๋ธ๋ง (logical modeling)
- ๊ฐ๋ ์ ๋ชจ๋ธ๋ง์์ ๋ง๋ ER๋ค์ด์ด๊ทธ๋จ์ ์ฌ์ฉํ๋ ค๋ DBMS์ ๋ง๊ฒ ๋งคํํ์ฌ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ๋ชจ๋ธ์ ๋ง๋๋ ๊ณผ์
๋ฌผ๋ฆฌ์ ๋ชจ๋ธ๋ง (physical modeling)
- ์์ฑ๋ ๋ ผ๋ฆฌ์ ๋ชจ๋ธ์ ์ค์ ์ปดํจํฐ์ ์ ์ฅ ์ฅ์น์ ์ ์ฅํ๊ธฐ ์ํ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ๊ตฌํํ๋ ๊ณผ์
'๐ป IT > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผํ๋ฉด์ ๋ฐฐ์ด MYSQL ++๊ณ์ ์ถ๊ฐ (0) | 2024.05.16 |
---|---|
mariadb sql๋ฌธ (+์๊ฐ ๋ ๋ ๋ง๋ค ์ถ๊ฐ ์์ ) (0) | 2024.02.29 |
ํธ๋์ญ์ (Transaction) (0) | 2024.01.22 |
ํธ๋์ญ์ (Transaction)
DBMS์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ๋จ์
- ํธ๋์ญ์
์ ์ ์ํ๋ ์ด์
- DB์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ๋ ์ฅ์ ๊ฐ ์ผ์ด๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ ๋จ์๊ฐ ๋๋ค.
- DB์์ ์ฌ๋ฌ ์์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์์ ์ ์๋ก ๋ถ๋ฆฌํ๋ ๋จ์๊ฐ ๋๋ค.
- ํธ๋์ญ์
์ ์ ์ฒด๊ฐ ์ํ๋๊ฑฐ๋ ๋๋ ์ ํ ์ํ๋์ง ์์์ผ ํ๋ค. (all or nothing)
ex) ์ํ ์ด์ฒด ์ ๋ฌด
BEGIN
1\. A๊ณ์ข์์ 10,000์์ ์ธ์ถํ๋ UPDATE๋ฌธ
2\. B๊ณ์ข์์ 10,000์์ ์
๊ธํ๋ UPDATE๋ฌธ
END
- ํธ๋์ญ์ ์ ์ํ ๊ณผ์

- ํธ๋์ญ์ 1์ ์์ฑํ๋ค
- ํธ๋์ญ์ 2๋ฅผ ์์ฑํ๋ค
- T1์ ๊ฐ์ DB์์ ์ฃผ๊ธฐ์ต์ฅ์น ๋ฒํผ๋ก ์ฝ์ด์จ๋ค
- T2์ ๊ฐ์ DB์์ ์ฃผ๊ธฐ์ต์ฅ์น ๋ฒํผ๋ก ์ฝ์ด์จ๋ค
- T1์์ ๋์ ๊ฐ๊ฒฝ์ 7100์์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ค
- T2์์ ๋์ ๊ฐ๊ฒฉ +100์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ค
- T1๊ฐ์ ์ฃผ๊ธฐ์ต์ฅ์น ๋ฒํผ์์ DB์ ๊ธฐ๋กํ๋ค (COMMIT)
- T2๊ฐ์ ์ฃผ๊ธฐ์ต์ฅ์น ๋ฒํผ์์ DB์ ๊ธฐ๋กํ๋ค (COMMIT)
- ํธ๋์ญ์
์ ์ฑ์ง (ACID)
- ์์์ฑ (Atomicity) : ํธ๋์ญ์
์ ํฌํจ๋ ์์
์ ์ ๋ถ ์ํ๋๊ฑฐ๋ ์ ๋ถ ์ํ๋์ง ์์์ผํ๋ค.
all or nothing
- ์ผ๊ด์ฑ (Consistency) : ํธ๋์ญ์ ์ ์ํํ๊ธฐ ์ ์ด๋ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํญ์ ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํด์ผํ๋ค.
- ๊ณ ๋ฆฝ์ฑ (Isolation) : ์ํ ์ค์ธ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ผ์ด๋ค์ด ๋ณ๊ฒฝ ์ค์ธ ๋ฐ์ดํฐ๊ฐ์ ํผ์ํ๋ ์ผ์ด ์์ด์ผํ๋ค.
- ์ง์์ฑ (Durability) : ์ํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ํธ๋์ญ์ ์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ์ ์ฅํด์ผํ๋ค.
- ์์์ฑ (Atomicity) : ํธ๋์ญ์
์ ํฌํจ๋ ์์
์ ์ ๋ถ ์ํ๋๊ฑฐ๋ ์ ๋ถ ์ํ๋์ง ์์์ผํ๋ค.
- ๋์์ฑ ์ ์ด (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 ์์ฒญ | ๋๊ธฐ | ๋๊ธฐ |
'๐ป IT > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผํ๋ฉด์ ๋ฐฐ์ด MYSQL ++๊ณ์ ์ถ๊ฐ (0) | 2024.05.16 |
---|---|
mariadb sql๋ฌธ (+์๊ฐ ๋ ๋ ๋ง๋ค ์ถ๊ฐ ์์ ) (0) | 2024.02.29 |
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง (0) | 2024.02.26 |