[MariaDB] View

chaeyeongยท2025๋…„ 2์›” 4์ผ

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
3/6

โœจ VIEW

๐Ÿ’ก์ฟผ๋ฆฌ๋ฌธ์„ ์ €์žฅํ•œ ๊ฐ์ฒด๋กœ ๊ฐ€์ƒํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ณ  ์ฟผ๋ฆฌ๋งŒ ์ €์žฅํ–ˆ์ง€๋งŒ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋™์‹œ์—, ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

View์˜ ์‚ฌ์šฉ ๋ชฉ์ 

  • ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ๊ตฌ๋ฌธ์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ SELECT ๊ตฌ๋ฌธ์ด ๊ธฐ๋Šฅ์ƒ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๋‹ค.

  • ์ฒ˜์Œ ์œ ์ €๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ์—๋Š” ๊ถŒํ•œ์„ ์„ธ๋ถ€์ ์œผ๋กœ ๋‚˜๋ˆ ์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋ณด์•ˆ์„ฑ์ด ํ•„์š”ํ•œ ์›๋ณธ DB์—์„œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด View๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ณด์—ฌ์ฃผ๊ณ  ์›๋ณธ ํ…Œ์ด๋ธ”์€ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ด€๋ฆฌํ•œ๋‹ค.


View ์ƒ์„ฑ

CREATE VIEW hansik AS
SELECT
	   menu_code
	 , menu_name
	 , menu_price
	 , category_code
	 , orderable_status
	FROM tbl_menu
 WHERE category_code = 4;

View ์กฐํšŒ

SELECT * FROM hansik;

๋ฐ์ดํ„ฐ ์‚ฝ์ž…

(1) ์›๋ณธ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด View์—๋„ ๋ฐ˜์˜๋œ๋‹ค.

INSERT
	INTO tbl_menu
VALUES(NULL, '์‹ํ˜œ๋ง›๊ตญ๋ฐฅ', 5500, 4, 'Y');

(2) view์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์›๋ณธ ํ…Œ์ด๋ธ”์—๋„ ๋ฐ˜์˜๋œ๋‹ค.

INSERT
	INTO hansik
VALUES (99, '์ˆ˜์ •๊ณผ๋ง›๊ตญ๋ฐฅ', 5500, 4, 'Y');


๋ฐ์ดํ„ฐ ์ˆ˜์ •

  • View์™€ ์›๋ณธ ํ…Œ์ด๋ธ”์— ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋œ๋‹ค.
UPDATE hansik
	SET menu_name = '๋ฒ„ํ„ฐ๋ง›๊ตญ๋ฐฅ'
	  , menu_price = 5700
 WHERE menu_code = 99;

View

Base Table

๐Ÿšจ View๋ฅผ ์ด์šฉํ•ด DML ๋ช…๋ น์–ด ์กฐ์ž‘์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

  • ๋ทฐ ์ •์˜์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ์„ ์กฐ์ž‘ํ•  ๋•Œ

  • ๋ทฐ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ ์ค‘ ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— not null ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • ์‚ฐ์ˆ  ํ‘œํ˜„์‹์ด ์ •์˜๋œ ๊ฒฝ์šฐ

  • join์„ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•œ ๊ฒฝ์šฐ

  • distinct๋ฅผ ํฌํ•จํ•œ ๊ฒฝ์šฐ

  • ๊ทธ๋ฃนํ•จ์ˆ˜ ๋˜๋Š” group by ๋“ฑ์„ ํฌํ•จํ•œ ๊ฒฝ์šฐ


OR REPLACE

  • ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ทฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ต์ฒดํ•œ๋‹ค.
CREATE OR REPLACE VIEW hansik AS
SELECT
	   menu_code
	 , menu_name
	 , menu_price
	 , category_code
	 , orderable_status
	FROM tbl_menu
 WHERE category_code = 4;

CHECK OPTION

  • ๋ทฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ๋ทฐ ์ •์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ถ”๊ฐ€/์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.
    • with local check option : ๋ทฐ ์ž์ฒด ์กฐ๊ฑด๋งŒ ๊ฒ€์‚ฌ
    • with cascadded check option : ์ƒ์œ„ ๋ทฐ์˜ ์กฐ๊ฑด๊นŒ์ง€ ๊ฒ€์‚ฌ (default)
CREATE OR REPLACE VIEW hansik_with_check AS
SELECT
	   menu_code
	 , menu_name
	 , menu_price
	 , category_code
	 , orderable_status
	FROM tbl_menu
 WHERE category_code = 4;
 	WITH CHECK OPTION;

๐Ÿšจ CHECK OPTION ์œ„๋ฐ˜ ์˜ˆ์ œ

INSERT
	INTO hansik_with_check
VALUES(100, '๊ฐ์žํƒ•', 8000, 3, 'Y');	-- ์‚ฝ์ž… ์‹คํŒจ

INSERT
	INTO hansik
VALUES(100, '๊ฐ์žํƒ•', 8000, 3, 'Y');	-- check option ์—†์–ด์„œ ์‚ฝ์ž… ๊ฐ€๋Šฅ


View ์‚ญ์ œ

DROP VIEW hansik;
DROP VIEW hansik_with_check;
profile
๊ทธ๋ž˜๋„ ํ•ด์•ผ์ง€ ์–ด๋–กํ•ด

0๊ฐœ์˜ ๋Œ“๊ธ€