๐ 2023๋ 11์ 22์ผ
[DB 5์ผ์ฐจ]
์์ธ๊ณผ ๋ชฉ์ฐจ์ฒ๋ผ ๋ฐ์ดํฐ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๋๋ฐ ์ฌ์ฉ
(์กฐํ ์ฑ๋ฅ์ ์ข์์ง๋๋ฐ ์ฝ์
์ฑ๋ฅ์ ๋จ์ด์ง๋ค.)
(์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ํ
์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ผ ํจ์จ์ ์ด๋ค.)
-- ๋จ์ผ ์ปฌ๋ผ 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 ์์ฑ 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';
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);
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ sql ํ์์ผ๋ก ์ถ์ถํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฐฉ์
-- ๋คํ ์์ฑ ๋ช ๋ น์ด (utf8 ์ค์ ) mysqldump -u root -p --default-character-set=utf8mb4 board > dumpfile.sql -- ๋คํ ์ ๋ ฅ ๋ช ๋ น์ด mysql -u root -p board < dumpfile.sql