MySQL에서 특정 행의 값을 해당 열의 기본값으로 되돌려야 하는 경우가 종종 있습니다. 이럴 때 UPDATE 문과 함께 DEFAULT 키워드를 사용하면 아주 간단하게 처리할 수 있습니다. 이 글에서는 실제 예제를 통해 그 방법을 단계별로 자세히 살펴보겠습니다.
1. 데모 테이블 생성하기
먼저 연습용 데모 테이블을 생성합니다.
mysql> create table defaultDemo
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.48 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 여러 레코드를 추가합니다.
mysql> insert into defaultDemo values(10); Query OK, 1 row affected (0.25 sec) mysql> insert into defaultDemo values(20); Query OK, 1 row affected (0.13 sec) mysql> insert into defaultDemo values(30); Query OK, 1 row affected (0.14 sec) mysql> insert into defaultDemo values(40); Query OK, 1 row affected (0.11 sec) mysql> insert into defaultDemo values(80); Query OK, 1 row affected (0.18 sec) mysql> insert into defaultDemo values(90); Query OK, 1 row affected (0.14 sec) mysql> insert into defaultDemo values(100); Query OK, 1 row affected (0.10 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from defaultDemo;
실행 결과는 다음과 같습니다.
+------+ | Id | +------+ | 10 | | 20 | | 30 | | 40 | | 80 | | 90 | | 100 | +------+ 7 rows in set (0.00 sec)
4. DEFAULT 키워드로 행 되돌리기
이제 핵심인 쿼리입니다. 다음과 같이 UPDATE 문에서 DEFAULT 키워드를 사용하면 조건에 맞는 행의 값을 열의 기본값으로 되돌릴 수 있습니다.
mysql> update defaultDemo set Id=default where Id > 45; Query OK, 3 rows affected (0.39 sec) Rows matched: 3 Changed: 3 Warnings: 0
위 쿼리는 Id 값이 45보다 큰 세 개의 행(80, 90, 100)을 대상으로 실행됩니다.
5. 변경 결과 확인하기
테이블을 다시 조회하면 해당 행들이 기본값으로 변경된 것을 확인할 수 있습니다.
mysql> select *from defaultDemo;
실행 결과는 다음과 같습니다.
+------+ | Id | +------+ | 10 | | 20 | | 30 | | 40 | | NULL | | NULL | | NULL | +------+ 7 rows in set (0.00 sec)
참고 사항: 기본값이 없는 열의 동작
열에 별도의 기본값이 정의되어 있지 않으면 DEFAULT 키워드는 해당 값을 NULL로 설정합니다. 위 예제에서 Id 열에는 기본값이 정의되어 있지 않았기 때문에 NULL이 저장된 것입니다.
만약 NULL 대신 특정 기본값을 적용하고 싶다면, 먼저 ALTER TABLE 문으로 열의 기본값을 정의한 후 DEFAULT 키워드를 사용하면 됩니다.
mysql> alter table defaultDemo modify Id int default 0;
이렇게 기본값을 0으로 설정해 두면, 이후 update ... set Id=default 쿼리를 실행할 때 해당 행의 값이 0으로 변경됩니다. 상황에 맞게 기본값을 활용하면 데이터 초기화 작업을 훨씬 깔끔하게 처리할 수 있습니다.