서론
pk가 `auto_increment` 로 설정하지 않을 때 사용하는 방법입니다.
MySQL 서버에 변수를 저장하고, 저장한 변수를 재사용하는 방식으로 해결합니다.
대입 연산자와 함께 변수를 저장하는 방법은 `SET @{변수명} := {저장할 값}` 입니다.
예시 쿼리
SET @last_id := (SELECT MAX(id) FROM gsheet_interaction_table);
SELECT @last_id:=@last_id+1, S.ct_id, P.platform 플랫폼, S.t_id, T.monitoring_title 작품명, S.url,
TRIM(S.rt) 영상길이, S.i_id
FROM monitoring_db.scraping_data_table S
JOIN platform_list P ON P.p_id=S.p_id
JOIN title_list T ON T.t_id=S.t_id
LEFT JOIN gsheet_interaction_table G ON S.ct_id = G.ct_id
WHERE S.c_id=6
AND S.p_id NOT IN (8, 9, 10, 11, 12, 13)
AND S.k_id != 0 /* 제보받은 키워드는 제외 */
AND S.t_id IN (771, 772)
AND S.i_id = 8
AND CASE
WHEN S.rt LIKE '%SHORTS' THEN '01:00'
WHEN S.rt = 'LIVE' THEN '00:00'
WHEN S.rt = '-' THEN '00:00'
WHEN S.rt = ' 예정' THEN '00:00'
ELSE CAST(S.rt as TIME)
END >= '10:00'
AND G.ct_id IS NULL;
설명
위의 예시 쿼리에서는 `SET @last_id := (SELECT MAX(id))` 로 pk 컬럼의 마지막 값(가장 큰 값이 마지막 레코드의 id 일 때)을 서버에 저장합니다.
이후 `SELECT 절` 에서 서버에 저장한 변수인 `@last_id`를 이용하는 쿼리입니다.
읽어주셔서 감사합니다.
'Database > MySQL' 카테고리의 다른 글
[스터디] Real MySQL 8.0 1권 - 5장 트랜잭션과 잠금 정리 (0) | 2024.09.23 |
---|---|
[MySQL] AUTO_INCREMENT 초기화하는 방법 (0) | 2023.04.27 |
[MySQL] 테이블 내 중복 데이터 삭제 (0) | 2023.04.27 |
[MySQL] 프로세스 확인과 프로세스 죽이기 (2) | 2022.09.30 |
[MySQL] 계정 조회, 계정 생성, 계정 삭제, 권한 조회, 권한 부여, 권한 삭제 (0) | 2022.09.30 |