Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 concat() 함수로 컬럼 값을 JSON 형식으로 업데이트하는 방법

MySQL에서 저장된 데이터를 마치 JSON 형식처럼 보이도록 표시하고 싶다면 concat() 함수를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 텍스트 타입 컬럼을 JSON 형태의 문자열로 업데이트하는 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. 자동 증가되는 기본키와 학생 정보를 담을 text 타입 컬럼으로 구성했습니다.

mysql> create table DemoTable1373
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentDetails text
-> );
Query OK, 0 rows affected (0.86 sec)

2. 레코드 삽입하기

insert 명령으로 레코드를 추가합니다. 이때 StudentDetails 컬럼에는 아무 값도 입력하지 않으므로 해당 컬럼은 NULL 상태로 저장됩니다.

mysql> insert into DemoTable1373 values();
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1373 values();
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1373 values();
Query OK, 1 row affected (0.18 sec)

3. 현재 데이터 확인하기

select 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1373;

실행 결과는 다음과 같습니다.

+-----------+----------------+
| StudentId | StudentDetails |
+-----------+----------------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+-----------+----------------+
3 rows in set (0.00 sec)

4. concat()으로 JSON 형식 문자열 업데이트하기

이제 update 문과 concat() 함수를 조합하여 StudentDetails 컬럼을 JSON 형태의 문자열로 변경합니다. 중괄호({ }), 콤마(,), 콜론(:) 등을 문자열로 연결해 JSON과 유사한 구조를 만들어 줍니다.

mysql> update DemoTable1373 set StudentDetails=concat("{" "StudentName:", " John ,"," StudentAge:", 21,",",", " StudentCountryName: "," US","} ");
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3 Changed: 3 Warnings: 0

5. 업데이트 결과 확인하기

업데이트가 정상적으로 적용되었는지 다시 한번 테이블을 조회해 보겠습니다.

mysql> select * from DemoTable1373;

결과는 다음과 같습니다.

+-----------+---------------------------------------------------------------+
| StudentId | StudentDetails |
+-----------+---------------------------------------------------------------+
| 1 | {StudentName: John , StudentAge:21, StudentCountryName: US} |
| 2 | {StudentName: John , StudentAge:21, StudentCountryName: US} |
| 3 | {StudentName: John , StudentAge:21, StudentCountryName: US} |
+-----------+---------------------------------------------------------------+
3 rows in set (0.00 sec)

참고 사항

위 방법은 단순히 JSON처럼 보이는 문자열을 저장하는 것이므로, 실제 JSON 데이터 타입의 기능(유효성 검사, JSON_EXTRACT 등)은 사용할 수 없습니다. MySQL 5.7 이상을 사용한다면 컬럼 타입을 JSON으로 선언하고 JSON_OBJECT(), JSON_SET() 같은 전용 함수를 활용하는 것이 더 안전하고 권장되는 방법입니다.