MySQL에서 문자열 분할 후 개별 값 삽입하기
MySQL에서는 준비된 문(Prepared Statement)을 활용하면 쉼표로 구분된 문자열을 분할하여 각각의 개별 값으로 테이블에 삽입할 수 있습니다. 이 글에서는 그 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 데이터를 저장할 테이블을 생성해야 합니다. 다음 쿼리를 사용하세요.
mysql> CREATE TABLE University
-> (
-> UserId int,
-> UniversityId int
-> );
Query OK, 0 rows affected (0.64 sec)
2단계: 변수 설정 및 값 가공
이제 위에서 만든 컬럼에 값을 설정합니다. 여기서는 UserId 컬럼에 쉼표로 구분된 문자열 '8,9,10'을 지정하고, 이를 분할하여 테이블에 삽입할 것입니다.
mysql> SET @userId = '8,9,10';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @UniversityId = 100;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @myValues = REPLACE(@userId, ',', CONCAT(', ', @UniversityId, '),('));
Query OK, 0 rows affected (0.00 sec)
mysql> SET @myValues = CONCAT('(', @myValues, ', ', @UniversityId, ')');
Query OK, 0 rows affected (0.00 sec)
mysql> SET @insertQuery1 = CONCAT('INSERT INTO University VALUES', @myValues);
Query OK, 0 rows affected (0.00 sec)
위 과정에서 REPLACE 함수로 쉼표를 행 구분자 형태로 변환한 뒤, CONCAT 함수를 이용해 완전한 INSERT 문장을 동적으로 구성했습니다.
3단계: 준비된 문 실행
모든 단계가 완료되면 생성한 @insertQuery1을 실행해야 합니다.
mysql> PREPARE st FROM @insertQuery1;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE st;
Query OK, 3 rows affected (0.18 sec)
Records: 3 Duplicates: 0 Warnings: 0
4단계: 결과 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM University;
다음 출력 결과를 보면 문자열 (8, 9, 10)이 성공적으로 분할되어 개별 값으로 삽입된 것을 확인할 수 있습니다.
+--------+--------------+
| UserId | UniversityId |
+--------+--------------+
| 8 | 100 |
| 9 | 100 |
| 10 | 100 |
+--------+--------------+
3 rows in set (0.00 sec)
5단계: 준비된 문 해제
마지막으로 사용이 끝난 준비된 문은 반드시 해제하는 것이 좋습니다.
mysql> DEALLOCATE PREPARE st;
Query OK, 0 rows affected (0.00 sec)
이처럼 Prepared Statement와 문자열 함수(REPLACE, CONCAT)를 조합하면 별도의 저장 프로시저나 애플리케이션 로직 없이도 순수 SQL만으로 쉼표 구분 문자열을 손쉽게 분할하여 삽입할 수 있습니다.