[MySQL]๊ธฐ๋ณธํค์ ๊ณ ์ ํค, ์ธ๋ํค / ๋ทฐ
https://www.yalco.kr/@sql-adv/4-1/
๊ธฐ๋ณธํค์ ๊ณ ์ ํค, ๊ทธ๋ฆฌ๊ณ ์ธ๋ํค
์ด๋ ค์ด ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ๋ค์ ์ฝ๊ฒ ์ค๋ช ํด์ฃผ๋ ์ ํ๋ธ ์ฑ๋ '์ํํ ์ฝ๋ฉ์ฌ์ '. ์์์์ ๋ค ์๋ ค์ฃผ์ง ๋ชปํ ์ ๋ณด๋ค์ด๋ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ๋ค์ ๋ต๋ณ๋ค, ์์ ์ฝ๋๋ค์ ์์ฝ์์ ํ์ธํ์ธ์!
www.yalco.kr
์์ฝ๋์ MySQL๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ฐ์ธ ๊ณต๋ถ์ฉ์ผ๋ก ์์ฑํ์์ต๋๋ค.
๊ธฐ๋ณธํค
์ค๋ณต๋์ง ์๋ ๊ณ ์ ๊ฐ๋ง ํ์ฉ.
NULL๊ฐ ํ์ฉํ์ง ์์.
ํ ์ด๋ธ๋น ํ๋์ ๊ธฐ๋ณธํค๋ง ์ง์ ๊ฐ๋ฅ.
-- ๊ธฐ๋ณธํค ๋ฃ๋ ๋ฐฉ๋ฒ 1
CREATE TABLE people (
first_name CHAR(2) PRIMARY KEY,
last_name CHAR(3),
nickname VARCHAR(10)
);
primaryํค๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์
ALTER TABLE people DROP PRIMARY KEY;
์ด์ฐจํผ peopleํ ์ด๋ธ์๋ first_name๋ง ๊ธฐ๋ณธํค์ด๋ค. (ํ ์ด๋ธ๋น ๊ธฐ๋ณธํค๋ ํ๋)
last_name์ ๊ณ ์ ํค๋ฅผ ๋ฃ์ด์ฃผ๋ฉด์
ALTER TABLE people ADD PRIMARY KEY (last_name);
๋ค์ค ๊ธฐ๋ณธํค
์ฌ๊ธฐ์ ๋ค์ค์ ์๋ฏธ๋ primary key์์ column์ด ์ฌ๋ฌ๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
first_name๊ณผ last_name์ ์กฐํฉ์ด ๊ฒน์น์ง ์์ผ๋ฉด ๋๋ค๋ ๊ฒ์ด๋ค.
INSERT INTO PEOPLE VALUES('ํ', '๊ธธ๋', '๋ณ๋ช
');
INSERT INTO PEOPLE VALUES('์ ', '์ฐ์น', '๋ณ๋ช
');
์ด๋ ๊ฒ ๋๊ฐ์ value๋ฅผ ๋ฃ์๋๋ฐ
INSERT INTO PEOPLE VALUES('ํ', '์ฐ์น', '๋ณ๋ช
');
INSERT INTO PEOPLE VALUES('์ ', '๊ธธ๋', '๋ณ๋ช
');
ํ์ฐ์น์ ์ ๊ธธ๋์ ๊ด์ฐฎ๋ค. first_name๊ณผ last_name์ ์กฐํฉ์ด ๊ฒน์น์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
INSERT INTO PEOPLE VALUES('ํ', '๊ธธ๋', '๋ณ๋ช
');
๋ง์ฝ ํ๊ธธ๋์ ๋ค์ ๋ฃ์ผ๋ฉด ์๋ฌ๊ฐ ๋ฌ๋ค. ์๋๋ฉด ํ๊ณผ ๊ธธ๋์ first_name๊ณผ last_name์ ์กฐํฉ์ด ๊ฒน์น๊ธฐ ๋๋ฌธ์ด๋ค.
๊ณ ์ ํค (unique)
์ค๋ณต์ ํํ๊ณ ,NULL์ด ๊ฐ๋ฅํ๋ค.
-- ๊ณ ์ ํค ๋ฃ๋ ๋ฐฉ๋ฒ 1
CREATE TABLE people (
person_id INT AUTO_INCREMENT PRIMARY KEY,
first_name CHAR(2) UNIQUE,
last_name CHAR(3)
);
๋ค์ค ๊ณ ์ ํค๋ ๊ฐ๋ฅํ๋ค.
-- ๋ค์ค ๊ณ ์ ํค
CREATE TABLE people (
person_id INT AUTO_INCREMENT PRIMARY KEY,
first_name CHAR(2),
last_name CHAR(3),
UNIQUE (first_name, last_name)
);
์ธ๋ํค
ALTER TABLE _์์ํ
์ด๋ธ๋ช
ADD CONSTRAINT _์ ์ฝ๋ช
FOREIGN KEY ( _์์ํ
์ด๋ธ์ธ๋ํค )
REFERENCES ๋ถ๋ชจํ
์ด๋ธ๋ช
( _๋ถ๋ชจํ
์ด๋ธ๊ธฐ๋ณธํค )
-- ON DELETE _์ญ์ ์์ ์ฝ
-- ON UPDATE _์์ ์์ ์ฝ
์ธ๋ํค๋ ์์ ํ ์ด๋ธ์ Alter table์์ ์ค์ ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
section table์ ์์ ํ ์ด๋ธ์ธ business ํ ์ด๋ธ์ foregin key๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ํ ๋ถ๋ชจํ ์ด๋ธ์ ์๋ ๊ฐ์ ์์ํ ์ด๋ธ์์ ์ง์ ํ ์ ์๋ค.
ALTER TABLE _์์ํ
์ด๋ธ๋ช
DROP FOREIGN KEY _์์ํ
์ด๋ธ์ธ๋ํค
์ธ๋ํค๋ฅผ ์ญ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ธ๋ํค์ ์ ์ฝ์ ๋ฃ๋ ๊ฒ์ ๋ถ๋ชจ ํ ์ด๋ธ์์ ํด์ค๋ค.
NO ACTION , RESTRICT : ์์ํ ์ด๋ธ์ ํด๋น ์ธ๋ํค๊ฐ ์์ ๋ ์์ , ์ญ์ ๋์ง ์์
CASCADE : ์์ ํ
์ด๋ธ์ ํด๋น ํ๋ ์์ /์ญ์
SET NULL : ์์ํ
์ด๋ธ์ ์ธ๋ํค๋ฅผ NULL๋ก (๋จ, ์์ ์ธ๋ํค๊ฐ NOT NULL์ผ ์ ์ค์ ๋ถ๊ฐ)
SET DEFAULT : ์์ ํ ์ด๋ธ์ ์ธ๋ํค๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก
On Update๋ฅผ ํตํด ์์ ์ค์ ์ ํด์ฃผ๊ณ , On Delete๋ฅผ ํตํด ์ญ์ ์ค์ ์ ํด์ค๋ค.
๋ทฐ - ๊ฐ์ํ ์ด๋ธ ์ค์
section view๋ผ๋ ๋ทฐ์ ์ ์ฅ์ ํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
-- ๋ทฐ ์์ฑ
CREATE VIEW section_view AS
SELECT section_id, section_name
FROM sections;
๋ทฐ์ ์กฐํ์ ์ญ์
-- ๋ทฐ ์กฐํ
SELECT * FROM section_view;
-- ๋ทฐ ์ญ์
DROP VIEW section_view;