MySQL에서 여러 개의 타임스탬프(Timestamp) 값을 일괄적으로 증가시켜야 할 때, 사용자 정의 변수(User-defined Variable)에 증가시킬 값을 미리 저장해 두고 UPDATE 문과 함께 활용하면 매우 편리합니다. 이 방법을 사용하면 쿼리 내에서 값을 직접 하드코딩하지 않고도 유연하게 시간 간격을 조절할 수 있습니다.
기본 문법
먼저 SET 구문으로 사용자 정의 변수에 증가시킬 값을 할당합니다. 여기서 'yourValue'는 증가시킬 값(초 단위)입니다. 그다음 MySQL의 UPDATE 문을 사용하여 해당 컬럼의 타임스탬프 값을 증가시킵니다.
set @anyVariableName := yourValue;
update yourTableName set yourColumnName = yourColumnName + interval (@anyVariableName) second;
예제 테이블 생성
실습을 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
DueDatetime timestamp
);
Query OK, 0 rows affected (0.73 sec)
데이터 삽입
INSERT 명령을 사용하여 테이블에 샘플 레코드를 몇 개 삽입합니다.
mysql> insert into DemoTable values('2019-01-31 12:30:40');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('2019-09-06 10:00:00');
Query OK, 1 row affected (0.73 sec)
mysql> insert into DemoTable values('2019-09-07 11:10:24');
Query OK, 1 row affected (0.25 sec)데이터 조회
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------------+
| DueDatetime |
+---------------------+
| 2019-01-31 12:30:40 |
| 2019-09-06 10:00:00 |
| 2019-09-07 11:10:24 |
+---------------------+
3 rows in set (0.00 sec)
타임스탬프 값 증가시키기
다음은 사용자 정의 변수를 활용하여 여러 타임스탬프 값을 동시에 증가시키는 쿼리입니다. 변수 '@secondValue'에 12를 할당한 후, UPDATE 문의 INTERVAL 절과 함께 적용합니다.
mysql> set @secondValue := 12;
Query OK, 0 rows affected (0.00 sec)
mysql> update DemoTable set DueDatetime = DueDatetime + interval (@secondValue) second;
Query OK, 3 rows affected (0.99 sec)
Rows matched: 3 Changed: 3 Warnings: 0
결과 확인
업데이트 후 테이블의 레코드를 다시 한번 조회해 보겠습니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다. 모든 타임스탬프 값이 정확히 12초씩 증가한 것을 확인할 수 있습니다.
+---------------------+
| DueDatetime |
+---------------------+
| 2019-01-31 12:30:52 |
| 2019-09-06 10:00:12 |
| 2019-09-07 11:10:36 |
+---------------------+
3 rows in set (0.00 sec)
정리
이처럼 사용자 정의 변수와 INTERVAL 절을 조합하면 테이블 전체 또는 특정 조건에 맞는 여러 행의 타임스탬프 값을 손쉽게 증가시킬 수 있습니다. 참고로 'second' 대신 'minute', 'hour', 'day', 'month', 'year' 등 다양한 시간 단위를 사용할 수 있으므로, 상황에 맞게 응용하면 됩니다.