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

MySQL INSERT() 함수에서 삽입 위치가 범위를 벗어나면 어떻게 될까?


MySQL INSERT() 함수에서 삽입 위치가 범위를 벗어나는 경우

MySQL의 INSERT() 함수는 지정한 삽입 위치(pos)가 유효 범위를 벗어나면 아무런 삽입 작업도 수행하지 않고 원본 문자열을 그대로 반환합니다. 삽입 위치가 범위를 벗어나는 대표적인 경우는 다음과 같습니다.

  • 음수를 삽입 위치로 전달하는 경우
  • 0(영)을 삽입 위치로 전달하는 경우
  • 원본 문자열의 전체 문자 수보다 2 이상 큰 값을 삽입 위치로 전달하는 경우

아래 예제를 통해 각 경우를 하나씩 살펴보겠습니다.

예제 1: 음수 위치를 전달한 경우

다음 쿼리는 삽입 위치로 음수(-1)를 전달했기 때문에 범위를 벗어나며, 결과적으로 어떤 삽입도 일어나지 않고 원본 문자열 'Virat'이 그대로 반환됩니다.

mysql> Select INSERT('Virat', -1,5,'Kohli');
+-------------------------------+
| INSERT('Virat', -1,5,'Kohli') |
+-------------------------------+
| Virat                         |
+-------------------------------+
1 row in set (0.00 sec)

예제 2: 0(영)을 전달한 경우

다음 쿼리는 삽입 위치로 0을 전달했습니다. INSERT() 함수의 위치는 1부터 시작하므로 0은 유효하지 않은 위치이며, 역시 삽입 없이 원본 문자열이 그대로 출력됩니다.

mysql> Select INSERT('Virat', 0,5,'Kohli');
+------------------------------+
| INSERT('Virat', 0,5,'Kohli') |
+------------------------------+
| Virat                        |
+------------------------------+
1 row in set (0.00 sec)

예제 3: 문자열 길이를 2 초과하는 위치를 전달한 경우

다음 쿼리는 삽입 위치가 원본 문자열의 문자 수를 2 초과하여 범위를 벗어납니다. 아래 예제에서 원본 문자열 'Virat'은 5개의 문자로 구성되어 있는데, 삽입 위치로 7(즉, 5 + 2)을 지정했기 때문에 삽입이 발생하지 않습니다.

mysql> Select INSERT('Virat', 7,5,'Kohli');
+------------------------------+
| INSERT('Virat', 7,5,'Kohli') |
+------------------------------+
| Virat                        |
+------------------------------+
1 row in set (0.00 sec)

정리

INSERT(str, pos, len, newstr) 함수는 str의 pos 위치부터 len 길이만큼의 부분 문자열을 newstr로 교체하는 방식으로 동작합니다. 이때 pos가 1 미만이거나 문자열 길이보다 2 이상 큰 값이면 유효한 삽입 위치가 아니므로 함수는 원본 문자열을 변경 없이 그대로 반환합니다. 반면 pos가 정확히 문자열 길이 + 1인 경우에는 문자열 맨 끝에 새 문자열이 추가되므로, 실무에서 문자열을 덧붙일 때 이 동작을 활용할 수 있습니다.