-- GROUP CONCAT으로 Tags의 데이터를 가져오는 방법
1. 모든 Tags 출력
SELECT * FROM Tags;
2. postId를 지정해 Tags를 출력
SELECT * FROM Tags WHERE postId = 1;
3. postId를 기준으로 GROUP BY를 지정
SELECT postId
FROM Tags
WHERE postId = 1
GROUP BY postId;
4. GROUP_CONCAT으로 tag데이터 출력
SELECT GROUP_CONCAT(tag SEPARATOR ', ')
FROM Tags
WHERE postId = 1
GROUP BY postId;
5. GROUP_CONCAT에서 알파벳 오름차순으로 정렬하기
SELECT GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ', ')
FROM Tags
WHERE postId = 1
GROUP BY postId;
5-1. SubQuery로 조회하기
SELECT
(SELECT GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ', ') FROM Tags WHERE postId = 1 GROUP BY postId) AS tagItem
;
-- MySQL Event Scheduler
이벤트 스케줄러
- 시간적 트리거, 시간 경과에 의해 트리거되는 개체
- 지정된 시간 강격의 경과에 대한 응답으로 명령문이 실행되는 개체
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern' | WHERE expr]
- MySQL 시스템 변수의 값을 출력한다.
ex) SHOW VARIABLES
- 모든 시스템 변수의 값을 출력한다.
mysql> SHOW VARIABLES LIKE '%event_scheduler%'
- event_scheduler이름이 포함된 시스템 변수를 조회한다.
- event_scheduler의 상태를 볼 수 있다.
mysql> SET GLOBAL event_scheduler = ON;
mysql> SET GLOBAL event_scheduler = OFF;
- 시스템 변수인 Event Scheduler의 상태를 변경한다.
mysql> SELECT * FROM information_schema.events;
mysql> SHOW EVENTS
- 현재 등록된 Event Scheduler의 목록을 조회한다.
CREATE EVENT ES_DELETE_Posts_endDate
ON SCHEDULE EVERY 1 HOUR
STARTS '2021-01-01 00:00:00'
DO
SELECT * FROM FinalProject.Posts;
- ES_DELETE_Posts_endDate 라는 이름으로 Event Scheduler를 생성한다.
- Event Scheduler는 매일 1시간마다 실행된다.
- Event Scheduler의 시작은 2021-01-01 00:00:00 부터 실행된다.
- SELECT * FROM FinalProject.Posts; 이벤트를 실행한다.
CREATE EVENT ES_INSERT_Posts_endDate
ON SCHEDULE EVERY 1 MINUTE
STARTS '2021-01-01 00:00:00'
DO
INSERT INTO FinalProject.Messages (postId, userId, message) VALUES (1, 2, "Start Events");
- ES_INSERT_Posts_endDate 라는 이름으로 Event Scheduler를 생성한다.
- Event Scheduler는 매일 1분마다 실행된다.
- Event Scheduler의 시작은 2021-01-01 00:00:00 부터 실행된다.
- INSERT INTO FinalProject.Messages (postId, userId, message) VALUES (1, 2, "Start Events"); 이벤트를 실행한다.
mysql> DROP EVENT ES_DELETE_Posts_endDate;
- ES_DELETE_Posts_endDate이름의 Event Scheduler를 삭제한다.
-- endDate를 지난 Posts 삭제
1. endDate가 지난 임시 데이터 삽입
INSERT INTO Posts (userId, title, maxMember, startDate, endDate) VALUES (1, 'endDate Temp Title', 3, NOW(), NOW());
- 현재 시간으로 설정해 삭제를 시도할 때 무조건 지난 시간으로 출력된다.
2. DELETE 문 정의
DELETE FROM Posts WHERE endDate <= NOW();
- endDate가 지났을 경우 삭제한다.
3. EVENT Scheduler 설정
SHOW VARIABLES LIKE '%event_scheduler%'
- event_scheduler이름이 포함된 시스템 변수를 조회한다.
- event_scheduler의 상태를 볼 수 있다.
SET GLOBAL event_scheduler = ON;
- 시스템 변수인 Event Scheduler의 상태를 변경한다.
4. EVENT Scheduler 정의
CREATE EVENT ES_DELETE_Posts_endDate
ON SCHEDULE EVERY 1 HOUR
STARTS '2021-01-01 00:00:00'
DO
DELETE FROM FinalProject.Posts WHERE endDate <= NOW();
- ES_DELETE_Posts_endDate 이름의 Event Scheduler를 생성한다.
- 매일 1시간 마다 실행된다.
- 시작 시간은 2021-01-01 00:00:00 이후 부터 시작된다.
- DELETE FROM FinalProject.Posts WHERE endDate <= NOW(); 이벤트를 실행한다.
- 쿼리문을 작성할 때 어느 Database의 테이블인지 확실하게 정의해야한다.
ex) MySQL의 시간이 00분이 되었을 때 쿼리문이 실행된다.
'항해99 > 필기노트' 카테고리의 다른 글
[필기노트] Redis-cli ZSET, MULTI EXEC Transaction (0) | 2021.08.24 |
---|---|
[필기노트] MySQL VIEW, API (0) | 2021.08.20 |
[필기노트] SQL, React 연동 (0) | 2021.08.13 |
[필기노트] MySQL 모임 초대 DB, SQL (0) | 2021.08.12 |
[필기노트] MySQL Geometry DataSet, Socket Middleware (0) | 2021.08.11 |