MySQL 8.0.13 버전부터는 TEXT, BLOB, GEOMETRY와 마찬가지로 JSON 타입 컬럼에도 표현식(expression) 형태의 기본값을 설정할 수 있습니다. 이 글에서는 ALTER TABLE 문과 JSON_OBJECT() 함수를 활용해 JSON 컬럼에 기본값을 지정하는 방법을 단계별로 살펴봅니다.
기본값 설정 문법
JSON 컬럼에 기본값을 설정하려면 아래와 같이 DEFAULT 제약조건을 사용합니다.
ALTER TABLE yourTableName
MODIFY COLUMN yourColumnName JSON NOT NULL DEFAULT ( JSON_OBJECT() );
여기서 ( JSON_OBJECT() )는 빈 JSON 객체 {}를 반환하는 표현식입니다. JSON 타입은 일반 문자열처럼 리터럴 값을 그대로 기본값으로 사용할 수 없기 때문에, 반드시 괄호로 감싼 표현식 형태로 작성해야 한다는 점에 유의하세요.
1단계: 테스트용 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table demo24
-> (
-> employee_information text
-> )
-> ;
Query OK, 0 rows affected (1.43 sec)
테이블 구조 확인
DESC 명령으로 테이블 구조를 확인해 보겠습니다.
mysql> desc demo24;
+----------------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------+------+-----+---------+-------+
| employee_information | text | YES | | NULL | |
+----------------------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
현재 employee_information 컬럼은 TEXT 타입이며, 기본값이 NULL로 설정되어 있는 것을 확인할 수 있습니다.
2단계: 컬럼을 JSON 타입으로 변경하고 기본값 지정
다음 쿼리를 실행하면 컬럼이 JSON 타입으로 변경되면서 동시에 기본값이 설정됩니다.
mysql> alter table demo24 modify column employee_information JSON NOT NULL DEFAULT ( JSON_OBJECT() );
Query OK, 0 rows affected (3.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
변경 결과 확인
mysql> desc demo24;
+----------------------+------+------+-----+---------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------+------+-----+---------------+-------------------+
| employee_information | json | NO | | json_object() | DEFAULT_GENERATED |
+----------------------+------+------+-----+---------------+-------------------+
1 row in set (0.00 sec)
컬럼이 json 타입으로 변경되었고, Default 항목에는 json_object()가, Extra 항목에는 DEFAULT_GENERATED가 표시됩니다. 이는 표현식 기반 기본값이 정상적으로 적용되었다는 의미입니다.
3단계: 기본값 동작 테스트
값 없이 레코드를 삽입하여 기본값이 자동으로 적용되는지 확인해 보겠습니다.
mysql> insert into demo24 values();
Query OK, 1 row affected (0.10 sec)
SELECT 문으로 데이터를 조회합니다.
mysql> select * from demo24;
+----------------------+
| employee_information |
+----------------------+
| {} |
+----------------------+
1 row in set (0.00 sec)
컬럼에 어떤 값도 지정하지 않았음에도 불구하고, 빈 JSON 객체인 {}가 자동으로 저장된 것을 확인할 수 있습니다.
정리 및 주의사항
- JSON 컬럼의 기본값은 반드시 괄호로 묶인 표현식 형태로 작성해야 하며, MySQL 8.0.13 이상 버전에서만 지원됩니다.
NOT NULL옵션과 함께 사용하면 값을 명시하지 않은 INSERT가 발생할 때마다 기본 JSON 객체가 자동으로 생성됩니다.- 필요에 따라
JSON_ARRAY()등 다른 JSON 함수를 기본값 표현식으로 활용할 수도 있습니다.