반응형
MySQL에서 JSON 컬럼의 값을 수정할 때 가장 많이 사용되는 함수가
JSON_INSERT, JSON_SET, JSON_REPLACE이다.
이 함수들은 이름은 비슷하지만 작동 방식이 완전히 다르며,
잘못 사용하면 의도와 다른 결과가 나올 수 있다.

✅ 공통 기본 문법
JSON_INSERT(json_doc, path, val[, path, val] ...)
JSON_SET(json_doc, path, val[, path, val] ...)
JSON_REPLACE(json_doc, path, val[, path, val] ...)
- json_doc: JSON 데이터
- path: JSON 내부 경로 ('$.필드명' 형식)
- val: 새로 추가하거나 수정할 값
반응형
🪛 1. JSON_INSERT: 존재하지 않는 경우에만 추가
값이 없을 때만 추가하고, 이미 존재하면 무시된다.
SELECT JSON_INSERT('{"name": "홍길동"}', '$.age', 30);
-- 결과: {"name": "홍길동", "age": 30}
SELECT JSON_INSERT('{"name": "홍길동", "age": 25}', '$.age', 30);
-- 결과: {"name": "홍길동", "age": 25} ← 기존 값 그대로
✅ Tip: 기본값 추가할 때 유용
🧩 2. JSON_SET: 항상 새 값으로 덮어씀
존재하든 말든 무조건 설정한다.
존재하면 덮어쓰고, 없으면 새로 추가함.
SELECT JSON_SET('{"name": "홍길동"}', '$.age', 30);
-- 결과: {"name": "홍길동", "age": 30}
SELECT JSON_SET('{"name": "홍길동", "age": 25}', '$.age', 30);
-- 결과: {"name": "홍길동", "age": 30} ← 덮어씀
✅ Tip: 기본값과 관계없이 무조건 설정할 때 사용
🧼 3. JSON_REPLACE: 존재하는 경우만 수정
해당 경로가 존재하는 경우에만 수정하고,
존재하지 않으면 아무 일도 안 함
SELECT JSON_REPLACE('{"name": "홍길동", "age": 25}', '$.age', 30);
-- 결과: {"name": "홍길동", "age": 30}
SELECT JSON_REPLACE('{"name": "홍길동"}', '$.age', 30);
-- 결과: {"name": "홍길동"} ← 무시됨
✅ Tip: 실수로 새로운 필드를 만들고 싶지 않을 때 사용
반응형
🔍 세 함수 비교 요약
| 함수 | 존재하지 않으면 | 존재하면 |
| JSON_INSERT | 추가 | 유지 |
| JSON_SET | 추가 | 덮어씀 |
| JSON_REPLACE | 무시 | 덮어씀 |
🧪 실전 예제
-- 기존 JSON
SET @json = '{"name": "유진", "email": "youjin@example.com"}';
-- 기본값 추가
SELECT JSON_INSERT(@json, '$.age', 20);
-- 항상 설정
SELECT JSON_SET(@json, '$.email', 'yujin@new.com');
-- 존재 시에만 변경
SELECT JSON_REPLACE(@json, '$.phone', '010-1234-5678');
🧠 실무 활용 팁
- 옵션 필드에 기본값을 추가할 때는 JSON_INSERT
- 사용자 설정값을 덮어쓰기할 때는 JSON_SET
- 민감한 값을 기존에 있을 때만 변경하고 싶을 때는 JSON_REPLACE
단순히 이름이 유사하다고 아무거나 쓰면 절대 안 된다.
테스트 데이터를 미리 넣고 결과를 확인하는 습관이 필요하다.
📘 공식 문서 참고
https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] (JSON6️⃣) 실무에서 JSON 타입을 쓸 때 주의할 점 (4) | 2025.07.17 |
|---|---|
| [MySQL] (JSON5️⃣) JSON 쿼리 성능 튜닝 전략: 인덱싱과 최적화 팁 (0) | 2025.07.17 |
| [MySQL] (JSON4️⃣) WHERE 절에서 JSON 조건 처리하는 방법 (0) | 2025.07.17 |
| [MySQL] (JSON3️⃣) JSON_EXTRACT, JSON_UNQUOTE, JSON_CONTAINS 파헤치기 (0) | 2025.07.17 |
| [MySQL] (JSON1️⃣) JSON 타입이란? 구조와 활용 예제 정리 (0) | 2025.07.17 |
| [MySQL] (고가용성4️⃣) Group Replication vs MHA 실무 비교와 선택 가이드 (0) | 2025.07.17 |
| [MySQL] (고가용성3️⃣) MHA 구성 방법과 장애 복구 흐름 정리 (2) | 2025.07.17 |
| [MySQL] (고가용성2️⃣) Group Replication 구성과 특징 완전 분석 (0) | 2025.07.17 |