MySQL에서 테이블의 모든 행에 있는 DATETIME 필드 값을 현재 날짜로 한 번에 변경해야 하는 경우가 종종 있습니다. 예를 들어 데이터 마이그레이션, 테스트 환경 구성, 배치 작업 등에서 이런 요구가 발생합니다. 이 글에서는 CURDATE() 함수를 활용한 UPDATE 쿼리로 이 작업을 간단하게 처리하는 방법을 단계별로 알아보겠습니다.
1. 테이블 생성하기
먼저 DATETIME 타입의 컬럼을 포함하는 테이블을 생성합니다.
mysql> create table DemoTable821(AdmissionDate datetime);
Query OK, 0 rows affected (1.24 sec)
'AdmissionDate'라는 이름의 DATETIME 컬럼 하나만 가진 간단한 테이블입니다.
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable821 values('2019-01-21');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable821 values('2018-11-02');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable821 values('2016-12-31');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable821 values('2015-03-19');
Query OK, 1 row affected (0.17 sec)DATETIME 컬럼에 날짜 문자열만 입력하면 시간은 자동으로 '00:00:00'으로 채워집니다.
3. 현재 저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable821;
실행 결과는 다음과 같습니다.
+---------------------+
| AdmissionDate |
+---------------------+
| 2019-01-21 00:00:00 |
| 2018-11-02 00:00:00 |
| 2016-12-31 00:00:00 |
| 2015-03-19 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)
각 행마다 서로 다른 과거 날짜가 저장되어 있는 것을 확인할 수 있습니다.
4. CURDATE()로 모든 행을 현재 날짜로 업데이트하기
이제 WHERE 절 없이 UPDATE 문과 CURDATE() 함수를 조합하면, 테이블의 모든 행에 대해 DATETIME 필드를 현재 날짜로 한 번에 설정할 수 있습니다.
mysql> update DemoTable821 set AdmissionDate=CURDATE();
Query OK, 4 rows affected (0.74 sec)
Rows matched: 4 Changed: 4 Warnings: 0
WHERE 조건을 지정하지 않았기 때문에 테이블 내 전체 4개 행이 모두 수정되었습니다.
5. 업데이트 결과 확인하기
다시 SELECT 문을 실행해 변경된 값을 확인합니다.
mysql> select *from DemoTable821;
실행 결과는 다음과 같습니다.
+---------------------+
| AdmissionDate |
+---------------------+
| 2019-08-03 00:00:00 |
| 2019-08-03 00:00:00 |
| 2019-08-03 00:00:00 |
| 2019-08-03 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)
모든 행의 AdmissionDate 값이 쿼리 실행 당시의 현재 날짜인 '2019-08-03'으로 동일하게 변경된 것을 볼 수 있습니다.
참고: CURDATE()와 NOW()의 차이
현재 시각까지 함께 저장하고 싶다면 CURDATE() 대신 NOW() 또는 CURRENT_TIMESTAMP를 사용하면 됩니다.
- CURDATE(): 현재 날짜만 반환 → '2019-08-03 00:00:00'
- NOW(): 현재 날짜와 시간을 함께 반환 → '2019-08-03 14:25:37'
즉, DATETIME 컬럼에 시간 정보까지 반영하려면 다음과 같이 쿼리를 작성하면 됩니다.
mysql> update DemoTable821 set AdmissionDate=NOW();
정리
WHERE 절 없이 UPDATE 문에 CURDATE() 함수를 사용하면 테이블의 모든 행에 대해 DATETIME 필드를 현재 날짜로 손쉽게 일괄 변경할 수 있습니다. 다만 전체 행이 수정되므로, 실무에서는 반드시 백업을 확보한 후 실행하거나 트랜잭션(BEGIN, COMMIT)을 활용해 안전하게 작업하는 것이 좋습니다.