MySQL에서 특정 조건에 해당하는 레코드의 타임스탬프(Timestamp) 필드를 현재 날짜와 시간으로 업데이트하는 방법을 단계별로 알아보겠습니다. 테이블 생성부터 데이터 삽입, UPDATE 쿼리 실행, 결과 확인까지 전체 과정을 예제와 함께 살펴봅니다.
1. 테이블 생성
먼저 데모용 테이블을 생성합니다. PunchOut 컬럼은 timestamp 타입으로, PunchStatus 컬럼은 tinyint(1) 타입으로 정의합니다.
mysql> create table DemoTable
-> (
-> PunchOut timestamp,
-> PunchStatus tinyint(1)
-> );
Query OK, 0 rows affected (0.51 sec)
2. 샘플 데이터 삽입
INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values('2019-01-31 6:30:10',1);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('2019-02-06 4:10:13',0);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2018-12-16 03:00:30',0);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2016-11-25 02:10:00',1);
Query OK, 1 row affected (0.22 sec)3. 저장된 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+---------------------+-------------+
| PunchOut | PunchStatus |
+---------------------+-------------+
| 2019-01-31 06:30:10 | 1 |
| 2019-02-06 04:10:13 | 0 |
| 2018-12-16 03:00:30 | 0 |
| 2016-11-25 02:10:00 | 1 |
+---------------------+-------------+
4 rows in set (0.00 sec)
4. 타임스탬프 필드 업데이트하기
다음은 MySQL 테이블의 타임스탬프 필드를 업데이트하는 쿼리입니다. WHERE 절 조건을 활용해 PunchStatus 값이 0인 레코드에만 now() 함수로 현재 날짜와 시간을 설정했습니다.
참고 − 현재 날짜와 시간은 2019-06-30 13:43:45입니다.
mysql> update DemoTable set PunchOut=now() where PunchStatus=0;
Query OK, 2 rows affected (0.19 sec)
Rows matched: 2 Changed: 2 Warnings: 0
5. 업데이트 결과 확인
업데이트가 완료된 후 테이블 레코드를 다시 조회하여 결과를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+---------------------+-------------+
| PunchOut | PunchStatus |
+---------------------+-------------+
| 2019-01-31 06:30:10 | 1 |
| 2019-06-30 13:43:45 | 0 |
| 2019-06-30 13:43:45 | 0 |
| 2016-11-25 02:10:00 | 1 |
+---------------------+-------------+
4 rows in set (0.00 sec)
실행 결과를 보면 PunchStatus가 0인 두 개 레코드의 PunchOut 값이 모두 현재 시간인 2019-06-30 13:43:45로 변경된 것을 확인할 수 있습니다. 반면 PunchStatus가 1인 레코드는 WHERE 조건에 해당하지 않기 때문에 원래 값이 그대로 유지됩니다.
핵심 정리
타임스탬프 필드 업데이트의 핵심은 UPDATE ... SET ... WHERE 구문입니다. now() 함수 대신 CURRENT_TIMESTAMP를 사용해도 동일한 결과를 얻을 수 있습니다. 단, WHERE 절을 생략하면 테이블의 모든 행이 일괄 업데이트되므로 반드시 조건을 명확히 지정하는 것이 안전합니다.