๊ฐ์
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด PostgreSQL์ ์ ์ธํ MySQL, MariaDB, Oracle์์๋ ํธ๋์ญ์ ๋ด์์ DDL์ ์คํํ๋ ์๊ฐ ๊ทธ ์ด์ ์ ์ํ๋ ๋ชจ๋ DML์ด ์๋์ผ๋ก ์ปค๋ฐ๋์ด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ผ๋ ์์ฑ์ ์ง์ํ๋ ํธ์ด ์ข๋ค.
START TRANSACTION;
-- DML
INSERT INTO test (id) VALUES (1);
-- DDL (PostgreSQL์ ์ ์ธํ DBMS์์๋ ์ด ์์ ์ ์๋ฌต์ COMMIT ๋ฐ์)
CREATE TABLE test2 (id INT);
ROLLBACK; -- ๋กค๋ฐฑ์ ์คํ๋์ง๋ง ์ด๋ฏธ ์ปค๋ฐ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฐ ์ํฅ ์์
๋ถ๋๋ฝ์ง๋ง ๋๋ ๊ทธ๋์ DDL์ ํธ๋์ญ์ ์ด ์ ์ฉ๋์ง ์๋๋ค๋ ์ฌ์ค์ ์๊ณ ์์์ง๋ง DDL์ ์คํํ๋ ์๊ฐ ๊ทธ ์ด์ ์ DML๊น์ง๋ ์๋์ผ๋ก ์ปค๋ฐ๋๋ค๋ ์ ์ ๋ชฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ MariaDB๋ง ์ฃผ๋ก ์ฌ์ฉํ๋ค ๋ณด๋ PostgreSQL์์๋ DDL์กฐ์ฐจ๋ ํธ๋์ญ์ ๋ด์์ ์ ์์ ์ผ๋ก ๋กค๋ฐฑ๋๋ค๋ ์ ๋ ์ด๋ฒ์ ์ฒ์ ์๊ฒ ๋์๋ค.
MySQL, MariaDB
MySQL(InnoDB ๊ธฐ์ค)๊ณผ MariaDB๋ DDL ๋ฌธ์ฅ์ ํธ๋์ญ์ ๊ณผ ์์ ํ ๋ ๋ฆฝ๋ ๋ณ๋ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ DDL์ด ์คํ๋๊ธฐ ์ง์ ์ ํธ๋์ญ์ ๋ธ๋ก ๋ด์์ ์คํ๋์๋๋ผ๋ ๊ธฐ์กด์ ์งํ ์ค์ด๋ ๋ชจ๋ ํธ๋์ญ์ ์ ์๋ฌต์ ์ผ๋ก ์ปค๋ฐ๋๋ค.
์ฌ์ง์ด DDL๊ณผ DML์ด ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ค๋ฃจ๋๋ผ๋, ๊ทธ๋ฆฌ๊ณ DDL์ด ์คํจํ๋๋ผ๋ ์ฑ๊ณต ์ฌ๋ถ์ ์๊ด์์ด ์๋ ์์ ์ ์ปค๋ฐ์ด ๋ฐ์ํ๋ค. ์ฆ DDL๊ณผ DML์ ํ๋์ ์์์ ํธ๋์ญ์ ๋จ์๋ก ๋ฌถ์ด์ง ์๊ณ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
START TRANSACTION;
INSERT INTO test (id) VALUES (1);
-- TEMPORARY TABLE ์์ฑ (์๋ฌต์ ์ปค๋ฐ ๋ฐ์ํ์ง ์์)
CREATE TEMPORARY TABLE temp_test (id INT);
ROLLBACK; -- ์์ INSERT๊น์ง ๋ชจ๋ ๋กค๋ฐฑ๋จ
๋ค๋ง ์์ ๊ฐ์ด CREATE TEMPORARY TABLE๊ณผ ๊ฐ์ ์ผ๋ถ ๋ช ๋ น์ ์์ธ์ ์ผ๋ก ์๋ฌต์ ์ปค๋ฐ์ ๋ฐ์์ํค์ง ์๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ๋ด DML๊ณผ ํจ๊ป ๋กค๋ฐฑ๋๋ค.
Oracle
Oracle ๋ํ ํธ๋์ญ์ ๋ด์์ DDL์ ์คํํ๋ฉด ์ฆ์ ์๋ฌต์ ์ปค๋ฐ์ด ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ MySQL, MariaDB์ ๋ง์ฐฌ๊ฐ์ง๋ก DDL๊ณผ DML์ ํ๋์ ํธ๋์ญ์ ๋จ์๋ก ๋ฌถ์ ์ ์๋ค.
PostgreSQL
PostgreSQL์ ๋ค๋ฅธ RDBMS์ ๋ฌ๋ฆฌ ๋๋ถ๋ถ์ SQL ๋ฌธ์ฅ, ์ฌ์ง์ด DDL์กฐ์ฐจ๋ ํธ๋์ญ์ ๋ธ๋ก ๋ด์์ ์คํํ ์ ์์ผ๋ฉฐ ์คํ ์ค ์๋ ์ปค๋ฐ์ด ๋ฐ์ํ์ง ์๋๋ค. ์ด ๋๋ถ์ DDL๋ DML๊ณผ ํจ๊ป ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค.(๋จ, CREATE/DROP DATABASE, CREATE/DROP TABLESPACE, CLUSTER์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด๋ ๋ฌผ๋ฆฌ์ ์ ์ฅ์์ ์ํฅ์ ๋ฏธ์น๋ ๋ช ๋ น์ด๋ ํธ๋์ญ์ ๋ธ๋ก ๋ด์์ ์ฌ์ฉ ๋ถ๊ฐ)
MySQL๊ณผ ๋ฌ๋ฆฌ PostgreSQL์์ ์ด๋ฌํ ๋์์ด ๊ฐ๋ฅํ ์ด์ ๋ MVCC ์ ์ฉ ๋ฒ์์ ์ฐจ์ด ๋๋ฌธ์ด๋ค. MySQL(InnoDB)์ MVCC๋ฅผ ์ฌ์ฉ์ ๋ฐ์ดํฐ์๋ง ์ ์ฉํ๊ณ ๋ฉํ๋ฐ์ดํฐ(ํ ์ด๋ธ ์ ์ ๋ฑ)๋ ๋ณ๋๋ก ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ์ผ๋ก ๋กค๋ฐฑํ ์ ์์ง๋ง, PostgreSQL์ ์์คํ ์นดํ๋ก๊ทธ๊น์ง ์ผ๋ฐ ํ ์ด๋ธ๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์ MVCC ๋์์ผ๋ก ๊ด๋ฆฌํ๋ฏ๋ก DDL ๋ณ๊ฒฝ๋ ํธ๋์ญ์ ๋ด์์ ์์ ํ๊ฒ ๋กค๋ฐฑํ ์ ์๋ค.
'BackEnd๐ฑ > DB & SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
select .. for update ๋์ ์ ๋ฌด์ ๋ฐ๋ฅธ ์ ๊ธ ์ํ (0) | 2024.04.11 |
---|---|
[Docker MySQL] Proxy Layer ๊ตฌ์ถํ๊ธฐ (0) | 2023.11.12 |
[Docker MySQL] Orchestrator๋ฅผ ์ด์ฉํ High Availability(HA) ๊ตฌ์ถํ๊ธฐ (6) | 2023.11.06 |
[Docker MySQL] Master-Slave Replication(๋ณต์ ) ๊ตฌ์ถํ๊ธฐ (0) | 2023.11.01 |
[MySQL] MVCC๋ฅผ ํตํ ์ ๊ธ์๋ ์ฝ๊ธฐ (7) | 2023.10.07 |
[MySQL] ์ฌ์ฉ์ ์์ฑ ๋ฐ ๊ถํ ๋ถ์ฌ ๋ฐฉ๋ฒ (0) | 2023.10.06 |
๋๊ธ