
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpw;SELECT user, host FROM mysql.user;GRANT SELECT ON board.author TO 'testuser'@'localhost';REVOKE SELECT ON board.author FROM 'testuser'@'localhost';FLUSH PRIVILEGES;SHOW GRANTS FOR 'testuser'@'localhost';-- 사용자 목록 조회
select * from mysql.user;
-- 사용자 생성
-- localhost 를 % 로 변경 : 원격 포함한 anywhere 접속
create user 'test1'@'localhost' identified by '4321';
-- 사용자에게 권한 부여 (root 에서 test1 에게 권한 부여)
-- root 계정에서 부여. 당연함.
grant select on board.author to 'test1'@'localhost';
-- test1 로 로그인 후에 root 계정에 있던 author 테이블 조회해보기
select * from board.author;
-- 환경설정을 변경 후 확정
flush privileges;
-- 권한 조회
show grants for 'test1'@'localhost';
-- 사용자 권한 회수
revoke select on board.author from 'test1'@'localhost';
-- 사용자 삭제
drop user 'test1'@'localhost';
👊🏻 오류가 발생했었는데 root 계정에서 해야하는 부여를 test 계정에서 실행해서 발생한 오류였다.
당연한 문제였는데 막상 오류가 나니 침착하지 못했다..!
가상의 테이블로서 실제 데이터를 저장하지 않는 데이터 베이스.
실제 베이스를 참조하는 것으로, 테이블보다는 쿼리에 가까움.
뷰 생성 기본 문법
CREATE VIEW author_for_view AS SELECT 컬럼1, 컬럼2, ... FROM 테이블명;
뷰를 통한 테이블 조회
SELECT * FROM author_for_view;
JOIN 등의 복잡한 쿼리 결과를 view로 생성해두면, 이후에는 view를 간단한 쿼리로 호출.
view 를 활용해 필요한 컬럼만 선택하여 보여줄 수 있음.
-- view 생성
create view author_for_marketing_team as select name, age, role from author;
-- view 조회
select * from author_for_marketing_team;
-- (test1 계정에)view 권한 부여
grant select on board.author_for_marketing_team to test1;
-- test1 계정에서 권한 확인
SELECT * FROM board.author_for_marketing_team;
-- view 수정(변경)
create or replace view author_for_marketing_team
as select name, email, age, role from author;
-- view 삭제
drop view author_for_marketing_team;
-- 등급 조회 >> IF문 활용
-- 글을 100개 이상 쓴 사용자는 고수입니다. 출력
-- 글을 10개 이상, 100개 미만 중수입니다.
-- 그 외 초보입니다.
DELIMITER //
CREATE PROCEDURE 등급조회(in emailInput varchar(255))
BEGIN
declare authorID int;
declare count int;
select id into authorId from author where email = emailInput;
select count(*) into count from post where author_id = authorId;
IF count >= 100 then
select '고수입니다.';
ELSEIF count >= 10 and count < 100 then
select '중수입니다.';
ELSE
select '초보입니다.';
END IF;
END
// DELIMITER ;
- WHERE 반복을 통해 post 대량 생성
-- 사용자가 입력한 반복 횟수에 따라 글이 도배되는데, title은 '안녕하세요'
DELIMITER //
CREATE PROCEDURE 글도배(in ab int)
BEGIN
declare count int default 0;
WHILE count < ab DO
INSERT INTO post(title) values('안녕하세요');
SET count = count + 1;
END WHILE;
END
// DELIMITER ;
👊🏻 WHERE 실습에서는 꽤 헤맸다. 오류가 발생해 결국 강사님께 질문 드렸다.
-- sql에서 문자열 합치는 concat('hello', 'world');
-- 글 상세조회 : input 값이 postId
-- title, contents, '홍길동' + '님'
DELIMITER //
CREATE PROCEDURE 상세조회(in postId int)
BEGIN
declare authorName varchar(255);
SELECT name into authorName from author
where id = (select author_id from post where id = postId);
set authorName = concat(authorName, '님');
SELECT title, contents, authorName from post where id = postId;
END
// DELIMITER ;
👊🏻 위 코드는 수업 중 JOIN을 이용한 분들이 많으셔서 나도 시도해보았다 !

DELIMITER //
CREATE PROCEDURE 상세조회(in postId int)
BEGIN
SELECT p.title, p.contents, concat(a.name, '님')
FROM post p INNER JOIN author a
ON p.author_id = i.id
WHERE p.id = postID;
END
// DELIMITER ;

성공 !
InnoDB
MyISAM
엔진종류 조회
DB 서버 구성
HA구성

고가용성. 장애없는 지속가능한 서비스를 지칭하고, 서버의 다중화 구성을 의미.
MySQL 프록시 및 로드 밸런서
실습이나 복습 중 발생하는 오류의 대부분은 오탈자, 경로 오류 등
내가 캐치할 수 있는 그런 당연한 것들에서부터 오는 오류였다.
하나 하나 찬찬히 뜯어보고도 모르겠어서 강사님께 질문 드렸는데,
단순한 것 때문임을 아는 순간.. 그런 질문을 했다는 나 자신도 부끄럽고
이런 질문으로 강사님의 시간을 빼앗아버렸다는 것도 너무 싫었다.
남을 위해서도 나를 위해서도 정신 바짝 차리자. 잘 하자❗️❗️❗️❗️❗️❗️