[๋ชฉ์ฐจ]
๐๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค
DBMS
SQL
TABLE ํ ์ด๋ธ
๐๋ฐ์ดํฐ ํ์ ๋ฐ ์ ์ฝ์กฐ๊ฑด
๐DDL
๐DML
๐DCL
ROLE : ๊ถํ๋ค์ ์งํฉ
Oracle ๊ธฐ๋ณธ์ ๊ณต ROLE
๐TCL
ํธ๋์ญ์ ์ ํน์ฑ ACID
ํธ๋์ญ์ ์ด์ /์ดํ ๋ฐ์ดํฐ ์ํ
Oracle๊ณผ SQL Server์ DDL, DML ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฐฉ์
๐๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค
ํน์ ๊ธฐ์ , ์กฐ์ง์ด ํ์๋กํ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํํ๋ก ์ ์ฅํด ๋์ ๊ฒ
DBMS
๋ฐ์ดํฐ ๋ง์์ง๊ณ ๊ณต์ ๋๋ฉด์ ๋จ์ ์ํํธ์จ์ด๋ง(ex. ์์ )์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ์ ํ๊ณ ๋ฐ์.
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ์ฉ ์ํํธ์จ์ด์ด๋ค.
ํ์ฌ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
SQL
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์, ์กฐ์, ์ ์ดํ ์ ์๋ ์ธ์ด
๋ฐ์ดํฐ ์ ์ DDL | ๋ฐ์ดํฐ ๊ตฌ์กฐ(ํ ์ด๋ธ)๋ฅผ ์ ์ํ๋ค. | create, alter, drop, rename, truncate |
๋ฐ์ดํฐ ์กฐ์ DML | ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ค๋ฃฌ๋ค. | select, insert, update, delete |
๋ฐ์ดํฐ ์ ์ด DCL | ๋ฐ์ดํฐ์ ์ ๊ทผ๊ถํ์ ๋ค๋ฃฌ๋ค. | grant, revoke |
ํธ๋์ ์ ์ ์ด์ด TCL | ํธ๋์ญ์ ์ ์ ์ดํ๋ค. | commit, rollback |
TABLE ํ ์ด๋ธ (๋ฐ์ดํฐ ๊ตฌ์กฐ)
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด(Object)๋ก์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ๋จ์์ด๋ค.
ํ ์ด๋ธ์ ํน์ ์ฃผ์ ์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ์งํฉ(ํ)์ด๋ค.
ํ ์ด๋ธ์ ๋ฐ๋์ ํ๋ ์ด์์ ์นผ๋ผ(์์ฑ)์ ๊ฐ์ ธ์ผ ํ๋ค.
๊ฐ๋ก = ํ = ROW(๋ก์ฐ) = ์์ฑ | ||
์ธ๋ก = ์ด = Column(์นผ๋ผ) = ๋ฐ์ดํฐ 1์ค | ||
์๋ณ์ | ๊ธฐ๋ณธํค Primary key | ๊ฐ ํ์ ํน์ ํ ์ ์๋ ์นผ๋ผ(์์ฑ) |
์ธ๋ถํค Foreign key | ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค์ ๋ด ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ์นผ๋ผ(์์ฑ) |
๐ ๋ฐ์ดํฐ ํ์ ๋ฐ ์ ์ฝ์กฐ๊ฑด
๋ฐ์ดํฐํ์ DATA TYPE
๋ฐ์ดํฐ๋ ํน์ ์นผ๋ผ(์์ฑ)์ด ๋ฐ์๋ค์ผ ์ ์๋ ์๋ฃ์ ์ ํ์ ์ ์ฅํด์ผํ๋ค.
Oracle | SQL Server | |
๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด | CHAR(๊ธธ์ด) | |
๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด | VARCHAR2(๊ธธ์ด) | VARCHAR(๊ธธ์ด) |
์ ์, ์ค์ ๋ฑ์ ์ซ์ | NUMBER | int, float |
๋ ์ง, ์๊ฐ | DATE | DATETIME |
CHAR์ ๊ณต๋ฐฑ์ ์ฒดํฌํ์ง ์๋๋ค. => 'AA' = 'AA '
VARCHAR2๋ ๊ณต๋ฐฑ์ ์ฒดํฌํ๋ค. => 'AA' ≠ 'AA '
์ ์ฝ์กฐ๊ฑด CONSTRAINT
ํน์ ์นผ๋ผ์ ์ฌ์ฉ์๊ฐ ์ํ๋ ์กฐ๊ฑด์ ๋ฐ์ดํฐ๋ง ์ ์ฅํ๊ธฐ ์ํ ์ ์ฝ์ด๋ค.
PRIMARY KEY (๊ธฐ๋ณธํค) | UNIQUE + NOT NULL |
FOREIGN KEY (์ธ๋ํค) |
ํ
์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ค. |
UNIQUE | ์ค๋ณต๋ ๊ฐ์ด ์ ์ฅ๋๋ฉด ์๋๋ค. + NULL ๊ฐ๋ฅ |
CHECK(์กฐ๊ฑด์) |
์
๋ ฅํ ์ ์๋ ๊ฐ์ ๋ฒ์ ๋ฑ์ ์ ํํ๋ค. |
DEFAULT ๊ฐ | ๊ฐ์ด ์ ๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ ์ ์ค์ ํ๋ค. |
NOT NULL | NULL ๊ธ์ง |
CREATE TABLE ํ
์ด๋ธ๋ช
(
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ PRIMARY KEY, -- PRIMARY KEYโ
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ REFERENCES ๋ค๋ฅธํ
์ด๋ธ๋ช
(์นผ๋ผ๋ช
), -- FOREIGN KEYโ
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ UNIQUE, -- UNIQUE
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ CHECK(์นผ๋ผ๋ช
>=100 AND ์นผ๋ผ๋ช
<300), -- CHECK
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ DEFAULT 'Y', -- DEFAULT
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ NOT NULL, -- NOT NULL
์นผ๋ผ๋ช
๋ฐ์ดํฐ์ ํ CHECK(์นผ๋ผ๋ช
>200) PRIMARY KEY, -- ์ ์ฝ์กฐ๊ฑด ํผํฉ๊ฐ๋ฅ
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
] PRIMARY KEY(์นผ๋ผ๋ช
, ์นผ๋ผ๋ช
..), -- PRIMARY KEYโ
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
] FOREIGN KEY(์นผ๋ผ๋ช
) REFERENCES ๋ค๋ฅธํ
์ด๋ธ๋ช
(์นผ๋ผ๋ช
) -- FOREIGN KEYโ
);
์์ฑ๋ ํ ์ด๋ธ ๊ตฌ์กฐ ํ์ธ
Oracle | DESCRIBE ํ ์ด๋ธ๋ช or DESC ํ ์ด๋ธ๋ช |
SQL Server | exec sp_help 'dbo.ํ ์ด๋ธ๋ช ' |
๐DDL Data Definition Language
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ๋จ์์ธ ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ์์ฑ, ๋ณ๊ฒฝ, ์ญ์ ํ ์ ์๋ ๋ช ๋ น์ด์ด๋ค.
๐ฅ SQL Server์์๋ ์ฌ๋ฌ ์ปฌ๋ผ์ ๋์์ ์์ ํ๋ ๊ตฌ๋ฌธ์ ์ง์ํ์ง ์๋๋ค.
๋ค์ ์ค ์๋์ค๋ช
๊ณผ ๊ฐ์ ํ
์ด๋ธ ๋ฐ PK์ ์ฝ์กฐ๊ฑด์ ์์ฑํ๋ DDL๋ฌธ์ฅ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์? (ORACLE ๊ธฐ์ค)
PRODUCTํ
์ด๋ธ
PROD_ID : VARCHAR2(10) NOT NULL
PROD_NM : VARCHAR2(100) NOT NULL
REG_DT : DATE NOT NULL
REGR_NO : NUMBER(10) NULL
1) CREATE TABLE PRODUCT ( PROD_ID VARCHAR2(10) NOT NULL, PROD_NM VARCHAR2(100) NOT NULL, REG_DT DATE NOT NULL, REGR_NO NUMBER(10) NULL ); ALTER TABLE PRODUCT ADD PRIMARY KEY PRODUCT_PK ON(PROD_ID); |
2) CREATE TABLE PRODUCT( PROD_ID VARCHAR2(10), PROD_NM VARCHAR2(100), REG_DT DATE, REGR_NO NUMBER(10) ); ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK PRIMARY KEY(PROD_ID); |
3) CREATE TABLE PRODUCT( PROD_ID VARCHAR2(10) NOT NULL, PROD_NM VARCHAR2(100) NOT NULL, REG_DT DATE NOT NULL, REGR_NO NUMBER(10) NULL, ADD CONSTRAINT PRIMARY KEY(PROD_ID) ); |
4) CREATE TABLE PRODUCT( PROD_ID VARCHAR2(10) NOT NULL, PROD_NM VARCHAR2(100) NOT NULL, REG_DT DATE NOT NULL, REGR_NO NUMBER(10), ); |
=> ์ ๋ต์ 4๋ฒ
[๊ธฐ๊ด๋ถ๋ฅ] ํ ์ด๋ธ
๋ถ๋ฅID : VARCHAR(10) PRIMARY KEY
๋ถ๋ฅ๋ช : VARCHAR(10) NOT NULL -> VARCHAR(30) NOT NULL
๋ฑ๋ก์ผ์ : VARCHAR(10) NULL -> DATE NOT NULL
์์ ๊ฐ์ด ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋, ์ฌ๋ฐ๋ฅธ SQL๋ฌธ์ฅ์?(SQL Server๊ธฐ์ค)
1) ALTER TABLE ๊ธฐ๊ด๋ถ๋ฅ ALTER COLUMN(๋ถ๋ฅ๋ช VARCHAR(30), ๋ฑ๋ก์ผ์ DATE NOT NULL);
2) ALTER TABLE ๊ธฐ๊ด๋ถ๋ฅ ALTER COLUMN(๋ถ๋ฅ๋ช VARCHAR(30) NOT NULL, ๋ฑ๋ก์ผ์ DATE NOT NULL);
3) ALTER TABLE ๊ธฐ๊ด๋ถ๋ฅ ALTER COLUMN ๋ถ๋ฅ๋ช VARCHAR(30); ALTER TABLE ๊ธฐ๊ด๋ถ๋ฅ ALTER COLUMN ๋ฑ๋ก์ผ์ DATE NOT NULL;
4) ALTER TABLE ๊ธฐ๊ด๋ถ๋ฅ ALTER COLUMN ๋ถ๋ฅ๋ช VARCHAR(30) NOT NULL; ALTER TABLE ๊ธฐ๊ด๋ถ๋ฅ ALTER COLUMN ๋ฑ๋ก์ผ์ DATE NOT NULL;
=> ์ ๋ต์ 4๋ฒ
๐DML Data Manipulation Language
ํ ์ด๋ธ ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ฝ์ , ์์ , ์ญ์ ํ ์ ์๋ ๋ช ๋ น์ด์ด๋ค.
** INSERT INTO ํ ์คํธํ ์ด๋ธ VALUES("");
์ค๋ผํด์ ""์ NULL๋ก ์ฒ๋ฆฌํ์ง๋ง SQL Server๋ "" ๊ทธ๋๋ก ์ฒ๋ฆฌํ๋ค.
๐DCL Data Control Language
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๋ ์ ์ ๋ฅผ ์์ฑํ๊ณ ๊ถํ์ ์ ์ดํ๋ ๋ช ๋ น์ด์ด๋ค.
ROLE : ๊ถํ๋ค์ ์งํฉ
์ ์ ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก SESSION, TABLE, PROCEDURE ๋ฑ์ ๋ง์ ๊ถํ์ ๋ถ์ฌํด์ผํ๋ค.
์ ์ ์ ๊ถํ ์ฌ์ด์ ROLE์ ์์ฑํ๊ณ , ์ด ROLE์ ๋ถ์ฌํจ์ผ๋ก์จ ๋ง์ ๊ถํ์ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋ถ์ฌํ ์ ์๊ฒ๋๋ค.
Oracle ๊ธฐ๋ณธ์ ๊ณต ROLE
CONNECT | ๋ก๊ทธ์ธ ๊ถํ (EX. CREATE SESSION...) |
RESOURCE | ์ค๋ธ์ ํธ ์์ฑ ๊ถํ (EX. CREATE TABLE...) |
๐ TCL Transaction Control Language
ํธ๋์ญ์ ์ ๋ถ๋ฆฌ๋ ์ ์๋ ํ ๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์์ ๊ฐ๋ฆฌํจ๋ค.
๋ถํ ํ ์ ์๋ ์ต์์ ๋จ์์ด๊ธฐ๋๋ฌธ์ ์ ๋ถ ์ ์ฉ๋๊ฑฐ๋ ์ ๋ถ ์ทจ์๋์ด์ผ ํ๋ค.
ํธ๋์ญ์ ์ ํน์ฑ ACID
์์์ฑ Atomicity | ํธ๋์ญ์ ์ ๋ถ๋ฆฌ๋์ง ์๊ณ ์ ๋ถ ์ ์ฉ๋๊ฑฐ๋ ์ ๋ถ ์ทจ์๋์ด์ผ ํ๋ค. |
์ผ๊ด์ฑ Consistency | ํธ๋์ญ์ ์คํ ์ ์ ์ค๋ฅ๊ฐ ์์๋ค๋ฉด ์คํ ํ์๋ ์ค๋ฅ๊ฐ ์์ด์ผํ๋ค. |
๊ณ ๋ฆฝ์ฑ Isolation | ํธ๋์ญ์
์คํ ๋์ค์ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ง์๋๋ค. * ์ ๊ธ(LOCKING) : ํธ๋์ญ์ ์คํ ๋์ค ๋ฐ์ดํฐ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํํ๋ ๊ฒ |
์ง์์ฑ Durability | ํธ๋์ญ์ ์ ์ฑ๊ณตํ ๋ด์ฉ์ DB์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค. |
ํธ๋์ญ์ ์ด์ /์ดํ ๋ฐ์ดํฐ ์ํ
์ด์ | ์ดํ |
- ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์๋ง ์ํฅ์ ๋ฐ์๊ธฐ๋๋ฌธ์ ์ด์ ์ํ๋ก ๋ณต๊ตฌ ๊ฐ๋ฅ - ํ์ฌ ์ฌ์ฉ์๋ select๋ฌธ์ฅ์ผ๋ก ๊ฒฐ๊ณผ ํ์ธ ๊ฐ๋ฅ - ๋ค๋ฅธ ์ฌ์ฉ์๋ ๊ธฐ์กด์ ๊ฒฐ๊ณผ(๋ณ๊ฒฝ์ด ๋ฐ์๋์ง ์์) ํ์ธ ๊ฐ๋ฅ - ๋ณ๊ฒฝ๋ ํ์ ์ ๊ธ(LOCKING)์ด ์ค์ ๋์ด ๋ค๋ฅธ์ฌ์ฉ์๊ฐ ์ ๊ทผ ๋ถ๊ฐ |
- DB์ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์๋๋ค. - ๋ณ๊ฒฝ ์ ์ ๋ฐ์ดํฐ๋ ์์ด๋ฒ๋ฆฌ๊ฒ๋๋ค. - ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค. - ๋ณ๊ฒฝ๋ ํ์ ์ ๊ธ(LOCKING)์ด ํ๋ฆฌ๊ณ ๋ค๋ฅธ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ค. |
Oracle ๊ณผ SQL Server์ DDL, DML ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฐฉ์
Oracle | SQL Server | |
DDL (create, alter, rename, drop, truncate) |
์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฅ์ ๋ฏธ์น๊ธฐ๋๋ฌธ์ ์ฆ์ ์๋ฃ๋๋ค.(AUTO COMMIT) Auto Commit = false๋ก ์ค์ ๋ถ๊ฐํ๋ค. |
์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฅ์ ๋ฏธ์น๊ธฐ๋๋ฌธ์ ์ฆ์ ์๋ฃ๋๋ค.(AUTO COMMIT) Auto Commit = false๋ก ์ค์ ๊ฐ๋ฅํ๋ค. |
DML (insert, update, delete) |
๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์ฌ๋ ค๋๊ณ ์์
ํ๊ธฐ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ COMMIT, ROLLBACK ๋ช ๋ น์ด๋ฅผ ์ง์ ์ ๋ ฅํด์ผ๋ง ๋ฐ์๋๋ค. |
DML๋ ์ฆ์ ์๋ฃ๋๋ค. (AUTO COMMIT) ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋ ROLLBACK ์ฒ๋ฆฌ๋๋ค. Auto Commit = false๋ก ์ค์ ๊ฐ๋ฅํ๋ค. |
AUTO COMMIT | ์์์ ํธ๋์ญ์ | ๋ช ์์ ํธ๋์ญ์ |
SQL Server์ ๊ธฐ๋ณธ๋ฐฉ์ DDL, DML ์ํ ์ DBMS๊ฐ ์๋์ผ๋ก COMMITํ๊ณ , ์ค๋ฅ ๋ฐ์ ์ ์๋์ผ๋ก ROLLBACK ์ํํ๋ค. |
Oracle์ ๊ธฐ๋ณธ๋ฐฉ์ DDL์ AUTO COMMIT์ด์ง๋ง DML์ ์ฌ์ฉ์๊ฐ COMMIT, ROLLBACK ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผํ๋ค. |
ํธ๋์ญ์
์ ์์๊ณผ ๋์ ๋ชจ๋ ๋ช
์ํ๋ค. BEGIN TRANSACTION ๋ช ๋ น๋ฌธ; COMMIT or ROLLBACK; |