BootCamp 7day

GyeongNamยท2023๋…„ 11์›” 22์ผ
0

BootCamp

๋ชฉ๋ก ๋ณด๊ธฐ
7/49
post-thumbnail

๐Ÿ“… 2023๋…„ 11์›” 22์ผ

[DB 5์ผ์ฐจ]


7์ผ์ฐจ: index, ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ, view, procedure, dump

Index :

์ƒ‰์ธ๊ณผ ๋ชฉ์ฐจ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ์‚ฌ์šฉ
(์กฐํšŒ ์„ฑ๋Šฅ์€ ์ข‹์•„์ง€๋Š”๋ฐ ์‚ฝ์ž… ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง„๋‹ค.)
(์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์•ผ ํšจ์œจ์ ์ด๋‹ค.)

-- ๋‹จ์ผ ์ปฌ๋Ÿผ index
CREATE INDEX author_name ON author(name);

-- ๋ณตํ•ฉ ์ปฌ๋Ÿผ index
CREATE INDEX author_index ON author(name, email);

--  index ์กฐํšŒ
show index from ํ…Œ์ด๋ธ”๋ช…;

์กฐํšŒ์‹œ where ์กฐ๊ฑด์— index ์ปฌ๋Ÿผ์„ ์กฐ๊ฑด์œผ๋กœ ๊ฑธ์–ด์ค˜์•ผ index๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์ด ์ด๋ฃจ์–ด์ง


์‚ฌ์šฉ์ž ๊ด€๋ฆฌ : ์œ ์ € ์ƒ์„ฑ, ๊ถŒํ•œ ์ถ”๊ฐ€

SELECT User, Host FROM mysql.user;	-- ์œ ์ € ๊ฒ€์ƒ‰

SHOW GRANTS FOR 'root'@'localhost';
-- GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
-- GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*A4B6157319038724E3560894F7F932C8886EBFCF' OR gssapi USING 'SID:BA' WITH GRANT OPTION

CREATE USER 'testuser'@'localhost' IDENTIFIED BY '1234';	-- ์œ ์ € ์ƒ์„ฑ

SHOW GRANTS FOR 'testuser'@'localhost';		-- ์œ ์ € ํ™•์ธ
-- GRANT USAGE ON *.* TO `testuser`@`localhost` IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF'

GRANT INSERT ON board.* TO 'testuser'@'localhost';		-- ์œ ์ € insert ๊ถŒํ•œ ์ถ”๊ฐ€

flush privileges;	-- ์ ์šฉ (๊นœ๋ฐ•ํ•˜์ง€ ๋ง๊ฒƒ)

View :

ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€์ง€๋งŒ,
๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ” ๋กœ์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฐธ์กฐ๋งŒ ํ•œ๋‹ค.

-- view ์ƒ์„ฑ
CREATE VIEW author_view AS 
SELECT * FROM author;

CREATE VIEW posts_view AS 
SELECT * FROM posts;

-- view ์กฐํšŒ
SELECT * FROM author_view;

-- view์— ๊ถŒํ•œ ์ฃผ๊ธฐ
GRANT SELECT ON board.author_view TO 'testuser'@'localhost';

procedure :

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

DELIMITER //
-- ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•˜๊ณ  ํ•จ์ˆ˜์™€ ๊ฐ™์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ 
-- ๊ธฐ๋ณธ ํ˜•์‹์€  (IN ๋ณ€์ˆ˜๋ช… ๋ณ€์ˆ˜ํƒ€์ž…)
CREATE PROCEDURE MY_PROCEDURE(
	IN IN_auth_id int	-- ๋งค๊ฐœ๋ณ€์ˆ˜
)
BEGIN 
DECLARE AVG_price  INT DEFAULT 0;		-- ๋ณ€์ˆ˜์„ ์–ธ
	SELECT AVG(price)	
	INTO AVG_price		-- ๋ณ€์ˆ˜์— select ๊ฐ’ ์ž…๋ ฅ
	FROM posts
	WHERE auth_id = IN_auth_id;

	IF AVG_price > 2000 THEN	-- ๋ถ„๊ธฐ
		SELECT '๊ณ ์•ก ์›๊ณ ๋ฃŒ ์ž‘๊ฐ€์ž…๋‹ˆ๋‹ค.' AS MESSAGE;
	ELSE
		SELECT '๊ณ ์•ก ์›๊ณ ๋ฃŒ ์ž‘๊ฐ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.' AS MESSAGE;
	END IF ;
END  //
DELIMITER ;
CALL MY_PROCEDURE(2)	// ํ˜ธ์ถœ

DELIMITER //
CREATE PROCEDURE INSERT_100(
    IN auth_id int
)
BEGIN 
DECLARE A INT DEFAULT 0;	-- ๋ณ€์ˆ˜ ์„ ์–ธ
WHILE A<100 DO	-- ๋ฐ˜๋ณต๋ฌธ
    INSERT INTO
	posts(auth_id, title) values(auth_id, CONCAT('WELLO WORLD', A));
    SET A = A+1;	-- ๋ณ€์ˆ˜ ์ˆ˜์ •
END WHILE;
END  //
DELIMITER ;

CALL INSERT_100(1); 

dump :

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ sql ํ˜•์‹์œผ๋กœ ์ถ”์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹

-- ๋คํ”„ ์ƒ์„ฑ ๋ช…๋ น์–ด (utf8 ์„ค์ •)
mysqldump -u root -p --default-character-set=utf8mb4 board > dumpfile.sql

-- ๋คํ”„ ์ž…๋ ฅ ๋ช…๋ น์–ด 
mysql -u root -p board < dumpfile.sql

github ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์Šต ๋‚ด์šฉ

profile
503 Service Unavailable Error

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