โ 43. ์คํค๋ง & ๋๋ฉ์ธ
โ ์คํค๋ง (Schema) : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ์ ์ฝ ์กฐ๊ฑด์ ๊ดํ ์ ๋ฐ์ ์ธ ๋ช ์ธ๋ฅผ ๊ธฐ์ ํ ๊ฒ
๋ฐ์ดํฐ ๊ฐ์ฒด, ์์ฑ, ๊ด๊ณ ๋ฐ ๋ฐ์ดํฐ ์กฐ์ ์ ๋ฐ์ดํฐ ๊ฐ๋ค์ด ๊ฐ๋ ์ ์ฝ์กฐ๊ฑด ๋ฑ์ ๋ํด ์ ๋ฐ์ ์ผ๋ก ์ ์
โ ๋๋ฉ์ธ (Domain) : ํ๋์ ์์ฑ์ด ๊ฐ์ง ์ ์๋ ๋์ผํ ์ ํ์ ์์๊ฐ๋ค์ ์งํฉ
๐ข ์คํค๋ง (Schema) ์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํ์์ค.
๋ต : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ์ ์ฝ์กฐ๊ฑด์ ๋ํ ๋ช ์ธ๋ฅผ ๊ธฐ์ , ์ ์ํ ๊ฒ
โ 44. DDL (Data Definition Language, ๋ฐ์ดํฐ ์ ์์ด)
: DB ๊ตฌ์กฐ, ๋ฐ์ดํฐ ํ์, ์ ๊ทผ ๋ฐฉ์ ๋ฑ DB ๊ตฌ์ถ / ์์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ธ์ด
๐ CREATE, ALTER, DROP, CASCADE, RESTRICTED
- CREATE SCHEMA: ์คํค๋ง๋ฅผ ์ ์
CREATE SCHEMA ๋ํ๊ต AUTHORIZATION ํ๊ธธ๋;
- CREATE DOMAIN: ๋๋ฉ์ธ์ ์ ์
CREATE DOMAIN ์ฑ๋ณ CHAR(1)
DEFAULT '๋จ'
CONSTRAINT ์ ํจ์ฑ๋ณ CHECK(VALUE IN ('๋จ','์ฌ'));
- CREATE TABLE: ํ
์ด๋ธ์ ์ ์
CREATE TABLE ํ์
(์ด๋ฆ VARCHAR(15) NOT NULL,
ํ๋ฒ CHAR(8),
์ ๊ณต CHAR(5),
PRIMARY KEY(ํ๋ฒ)
FOREIGN KEY(์ ๊ณต) REFERENCES ํ๊ณผ(ํ๊ณผ์ฝ๋)
ON DELETE SET NULL // ํํ์ด ์ญ์ ๋๋ฉด NULL ๋ก ๋ณ๊ฒฝ
ON UPDATE CASCADE); // ํ๊ณผ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ด๋ จ๋ ๋ชจ๋ ํํ ์ ๊ณต ์์ฑ ๊ฐ๋ ๊ฐ์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
- CREATE VIEW: ๋ทฐ๋ฅผ ์ ์
CREATE VIEW ์์ฐ๊ณ ๊ฐ(์ฑ๋ช
, ์ ํ๋ฒํธ)
AS SELECT ์ฑ๋ช
, ์ ํ๋ฒํธ
FROM ๊ณ ๊ฐ
WHERE ์ฃผ์ = '์์ฐ์';
- CREATE INDEX: ์ธ๋ฑ์ค๋ฅผ ์ ์
CREATE UNIQUE INDEX ๊ณ ๊ฐ๋ฒํธ_idx
ON ๊ณ ๊ฐ(๊ณ ๊ฐ๋ฒํธ DESC);
- ALTER TABLE: ํ
์ด๋ธ์ ๋ํ ์ ์๋ฅผ ๋ณ๊ฒฝ
ALTER TABLE ํ์ ADD ํ๋
VARCHAR(3);
ALTER TABLE ํ์ ALTER ํ๋ฒ VARCHAR(10) NOT NULL;
ALTER TABLE ํ์ DROP COLUMN ์ฃผ์ CASCADE;
- DROP: ์คํค๋ง, ๋๋ฉ์ธ, ๊ธฐ๋ณธ ํ
์ด๋ธ, ๋ทฐ ํ
์ด๋ธ, ์ธ๋ฑ์ค, ์ ์ฝ ์กฐ๊ฑด ๋ฑ์ ์ ๊ฑฐํ๋ ๋ช
๋ น๋ฌธ
DROP SCHEMA ๋ํ๊ต;
DROP DOMAIN ์ฑ๋ณ RESTIRCTED;
DROP TABLE ํ์ CASCADE;
DROP VIEW ์์ฐ๊ณ ๊ฐ;
DROP INDEX ๊ณ ๊ฐ๋ฒํธ_idx;
๐ CASCADE - ์ ๊ฑฐํ ์์๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํจ๊ป ์ ๊ฑฐ
RESTRICTED - ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ ๊ฑฐํ ์์๋ฅผ ์ฐธ์กฐ์ค์ผ ๋๋ ์ ๊ฑฐ๋ฅผ ์ทจ์
๐ข ๋ค์ ์ฃผ์ด์ง <student> ํ ์ด๋ธ์ name ์์ฑ์ idx_name ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ SQL ๋ช ๋ น๋ฌธ์ ์์ฑํ์์ค.
<student>
Stuentid | Name | Grade | Major | Address |
1000 | ๊น๊ธธ๋ | 1 | ์ปดํจํฐ๊ณตํ | ์์ธ |
2000 | ์ด๊ธธ๋ | 1 | ์ ๊ธฐ๊ณตํ | ๊ฒฝ๊ธฐ |
3000 | ๋ฐ๊ธธ๋ | 2 | ์ ์๊ณตํ | ๊ฒฝ๊ธฐ |
๋ต : CREATE INDEX idx_name ON student(name);
๐ข ์๋ ๋ณด๊ธฐ์ <ํ์> ํ ์ด๋ธ์ '์ฃผ์' ์ปฌ๋ผ์ ์ถ๊ฐํ๋ SQL ๋ฌธ์ ์์ฑํ๋ ๋น์นธ (1), (2) ์ ์๋ง์ ์ฉ์ด๋ฅผ ์ฐ์์ค.
(๋จ, ์ถ๊ฐ ์ปฌ๋ผ์ ์ด๋ฆ์ '์ฃผ์' ์ด๊ณ , ๋ฐ์ดํฐ ํ์ ์ ๊ฐ๋ณ ๋ฌธ์ํ 20์๋ฆฌ๋ก VARCHAR(20)์ด๋ค.)
<ํ์>
ํ๋ฒ | ์ด๋ฆ | ํ๊ณผ | ์ ํ๋ฒํธ |
2020001 | ์งฑ๊ตฌ | ์ปดํจํฐ | 010-0000-0000 |
2020003 | ์ ๋ฆฌ | ์ํ | 010-1111-1111 |
2020004 | ์ฒ ์ | ์ปดํจํฐ | 010-2222-2222 |
2020002 | ๋งน๊ตฌ | ํต๊ณ | 010-3333-3333 |
<SQL๋ฌธ>
(1) TABLE ํ์ (2) ์ฃผ์ VARCHAR(20);
๋ต : (1) ALTER, (2) ADD
โ 45. DCL (Data Control Language, ๋ฐ์ดํฐ ์ ์ด์ด)
: ๋ฐ์ดํฐ์ ๋ณด์, ๋ฌด๊ฒฐ์ฑ, ํ๋ณต, ๋ณํ์ ์ด ๋ฑ์ ์ ์ํ๋๋ฐ ์ฌ์ฉ
๐ GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT
- GRANT: ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌ
GRANT RESOURCE TO ์งฑ๊ตฌ;
GRANT CONNECT TO ์งฑ๊ตฌ;
โป DBA: ๊ด๋ฆฌ์, RESOURCE: DB๋ ํ
์ด๋ธ ์์ฑ ๊ฐ๋ฅ์, CONNECT: ์ ๋ณด ๊ฒ์ ๊ฐ๋ฅ์
GRANT ALL ON ๊ณ ๊ฐ TO ์งฑ๊ตฌ WITH GRANT OPTION; // ์ฌ์ฉ์ ID๊ฐ ์งฑ๊ตฌ์ธ ์ฌ๋์๊ฒ ๊ณ ๊ฐ ํ
์ด๋ธ์ ๋ํ ๋ชจ๋ ๊ถํ ๋ถ์ฌ
GRANT INSERT ON ๊ณ ๊ฐ TO ๋งน๊ตฌ;
โป ๊ถํ ์ข
๋ฅ: ALL, SELECT, INSERT, DELETE, UPDATE, ALTER ๋ฑ
โป WITH GRANT OPTION: ๋ถ์ฌ๋ฐ์ ๊ถํ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๋ค์ ๋ถ์ฌํ ์ ์๋ ๊ถํ ๋ถ์ฌ
- REVOKE: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์๊ฒ ๊ถํ์ ์ทจ์
REVOKE RESOURCE FROM ์งฑ๊ตฌ;
REVOKE CONNECT FROM ์งฑ๊ตฌ;
REVOKE GRANT OPTION FOR UPDATE ON ๊ณ ๊ฐ FROM ์งฑ๊ตฌ;
REVOKE ALL ON ๊ณ ๊ฐ FROM ์งฑ๊ตฌ;
โป GRANT OPTION FOR: ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ถํ์ ์ทจ์ํจ
COMMIT: ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ก์ด ์ผ๊ด์ฑ (Consistency) ์ํ๋ฅผ
๊ฐ์ง๊ธฐ ์ํด ๋ณ๊ฒฝ๋ ๋ชจ๋ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ ๋ช
๋ น์ด
ROLLBACK: ์์ง COMMIT ๋์ง ์์ ๋ณ๊ฒฝ๋ ๋ชจ๋ ๋ด์ฉ์ ์ทจ์ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ
์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ช
๋ น์ด
SAVEPOINT: ํธ๋์ญ์
๋ด์ ROLLBACKํ ์์น์ธ ์ ์ฅ์ ์ ์ง์ ํ๋ ๋ช
๋ น์ด
๐ข SQL ์ ์ด์ด๋ ๊ด๋ฆฌ์๊ฐ ๋ฐ์ดํฐ์ ๋ณด์, ๋ฌด๊ฒฐ์ฑ ์ ์ง, ๋ณํ์ ์ด, ํ๋ณต ๋ฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ธ์ด๋ฅผ ๋งํ๋ค.
SQL ์ ์ด์ด ์ค ROLLBACK ๋ช ๋ น๋ฌธ์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํ์์ค.
๋ต : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ฐ์ฐ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๊ฑฐ๋ ์ ์์ ์ผ๋ก ์ํ๋์๋ค๊ณ ํ๋๋ผ๋,
์ํ๋๊ธฐ ์ด์ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ ์ํด ์ฐ์ฐ ๋ด์ฉ์ ์ทจ์ํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
โ 46. DML (Data Manipulate Language, ๋ฐ์ดํฐ ์กฐ์์ด)
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๊ฐ ์์ฉํ๋ก๊ทธ๋จ์ด๋ ์ง์์ด๋ฅผ ํตํด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ง์ ์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ์ธ์ด
๐ SELECT, INSERT, DELETE, UPDATE
- ๊ฒ์๋ฌธ (SELECT ~ FROM ~)
SELECT ~ FROM ~ WHERE ~
SELECT ~ FROM ~ GROUP BY ~ HAVING
- ์ฝ์
๋ฌธ (INSERT INTO ~)
INSERT INTO ์ฌ์(์ด๋ฆ, ๋ถ์) VALUES ('ํ์นํ', '์ธํฐ๋ท');
INSERT INTO ์ฌ์ VALUES ('์ฅ๋ณด๊ณ ', '๊ธฐํ', #05/03/73#, 'ํ์ ๋', 90);
- ์ญ์ ๋ฌธ (DELETE FROM ~)
DELETE FROM ์ฌ์ WHERE ์ด๋ฆ = '์๊บฝ์ ';
- ๊ฐฑ์ ๋ฌธ (UPDATE ~ SET ~)
UPDATE ์ฌ์ SET ์ฃผ์ = '์์๋' WHERE ์ด๋ฆ = 'ํ๊ธธ๋';