MySQL에서는 특정 필드(컬럼)의 값을 테이블에 정의된 기본값(DEFAULT)으로 되돌려야 하는 경우가 종종 있습니다. 예를 들어, 잘못 입력된 데이터를 초기화하거나 특정 조건에 해당하는 레코드의 값을 기본 상태로 복원할 때 유용합니다.
MySQL에서는 이 작업을 수행하는 방법이 크게 두 가지가 있습니다.
- DEFAULT 키워드를 사용하는 방법
- DEFAULT() 함수를 사용하는 방법
방법 1: DEFAULT 키워드 사용
UPDATE 문에서 컬럼 값에 DEFAULT 키워드를 직접 지정하면, 해당 컬럼이 테이블 생성 시 정의한 기본값으로 설정됩니다. 기본 문법은 다음과 같습니다.
UPDATE yourTableName
SET yourColumnName = DEFAULT
WHERE yourCondition;
방법 2: DEFAULT() 함수 사용
두 번째 방법은 DEFAULT() 함수를 사용하는 것입니다. 함수의 인자로 컬럼 이름을 전달하면 해당 컬럼의 기본값이 반환되어 적용됩니다.
UPDATE yourTableName
SET yourColumnName = DEFAULT(yourColumnName)
WHERE yourCondition;
예제 테이블 생성
위 두 가지 문법이 실제로 어떻게 동작하는지 확인하기 위해 예제 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE Default_Demo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> Salary float,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.73 sec)
테이블이 생성되었으면 INSERT 명령으로 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO Default_Demo(Name, Age, Salary) VALUES('John', 23, 405.56);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO Default_Demo(Name, Age, Salary) VALUES('Carol', 25, 1000.98);
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO Default_Demo(Name, Age, Salary) VALUES('Larry', 21, 987.24);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO Default_Demo(Name, Age, Salary) VALUES('Sam', 24, 986.10);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO Default_Demo(Name, Age, Salary) VALUES('Mike', 22, 10000.50);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO Default_Demo(Name, Age, Salary) VALUES('David', 26, 100.45);
Query OK, 1 row affected (0.20 sec)SELECT 문으로 전체 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM Default_Demo;
실행 결과는 다음과 같습니다.
+----+-------+------+---------+
| Id | Name | Age | Salary |
+----+-------+------+---------+
| 1 | John | 23 | 405.56 |
| 2 | Carol | 25 | 1000.98 |
| 3 | Larry | 21 | 987.24 |
| 4 | Sam | 24 | 986.1 |
| 5 | Mike | 22 | 10000.5 |
| 6 | David | 26 | 100.45 |
+----+-------+------+---------+
6 rows in set (0.00 sec)
방법 1 적용: DEFAULT 키워드로 Age 초기화
이제 Id가 6인 레코드의 Age 컬럼을 DEFAULT 키워드를 사용해 기본값으로 재설정해 보겠습니다.
mysql> UPDATE Default_Demo SET Age = DEFAULT WHERE Id = 6;
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0
업데이트 후 테이블 전체를 다시 조회하면 결과를 확인할 수 있습니다.
mysql> SELECT * FROM Default_Demo;
+----+-------+------+---------+
| Id | Name | Age | Salary |
+----+-------+------+---------+
| 1 | John | 23 | 405.56 |
| 2 | Carol | 25 | 1000.98 |
| 3 | Larry | 21 | 987.24 |
| 4 | Sam | 24 | 986.1 |
| 5 | Mike | 22 | 10000.5 |
| 6 | David | NULL | 100.45 |
+----+-------+------+---------+
6 rows in set (0.00 sec)
결과를 보면 Id 6(David)의 Age 컬럼이 기본값인 NULL로 변경된 것을 확인할 수 있습니다. 이 테이블 생성 시 Age 컬럼에 별도의 기본값을 지정하지 않았기 때문에 기본값은 NULL이 됩니다.
방법 2 적용: DEFAULT() 함수로 Salary 초기화
같은 원리로 DEFAULT() 함수를 사용하여 Id가 6인 레코드의 Salary 컬럼을 기본값으로 재설정할 수 있습니다.
mysql> UPDATE Default_Demo SET Salary = DEFAULT(Salary) WHERE Id = 6;
Query OK, 1 row affected (0.21 sec)
Rows matched: 1 Changed: 1 Warnings: 0
변경된 레코드를 다시 조회해 보겠습니다.
mysql> SELECT * FROM Default_Demo WHERE Id = 6;
+----+-------+------+--------+
| Id | Name | Age | Salary |
+----+-------+------+--------+
| 6 | David | NULL | NULL |
+----+-------+------+--------+
1 row in set (0.00 sec)
Salary 컬럼 역시 기본값인 NULL로 성공적으로 업데이트된 것을 확인할 수 있습니다.
정리
MySQL에서 필드를 기본값으로 재설정하는 방법은 DEFAULT 키워드와 DEFAULT() 함수, 두 가지입니다. 두 방식 모두 결과는 동일하며, 컬럼에 명시적인 기본값이 정의되어 있지 않으면 NULL이 적용됩니다. 만약 컬럼 정의 시 DEFAULT 0처럼 특정 기본값을 지정했다면, 해당 값으로 초기화됩니다. 실무에서는 데이터 초기화나 배치 작업 시 이 문법을 활용하면 코드를 더 간결하게 유지할 수 있습니다.