MySQL 8.0에서 추가된 모든 기능

MySQL 8.0에서 추가된 모든 기능 – 함수

Estimated reading: 3 minutes 52 views

1. 신규 함수 REGEXP_INSTR

[원본제공링크 1]

REGEXP_INSTR 함수는 문자열에서 정규 표현식과 일치하는 부분의 시작 위치를 반환합니다. 패턴 매칭 시 보다 복잡한 조건을 사용할 수 있으며, 검색 시작 위치와 일치 횟수를 지정할 수 있습니다.

예시:

SELECT REGEXP_INSTR('abc def ghi', '\\s') AS position;

이 예시는 공백 문자(\s)가 나타나는 위치를 반환하며, 결과는 4입니다.

2. 신규 함수 REGEXP_LIKE

[원본제공링크 1]

REGEXP_LIKE 함수는 문자열이 정규 표현식 패턴과 일치하는지 여부를 확인하는 함수로, 불리언 값을 반환합니다. 기존의 LIKE 연산자보다 복잡한 패턴 매칭이 가능합니다.

예시:

SELECT *
FROM users
WHERE REGEXP_LIKE(email, '^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$');

이 예시는 이메일 형식에 맞는 사용자들을 조회합니다.

3. 신규 함수 REGEXP_REPLACE

[원본제공링크 1]

REGEXP_REPLACE 함수는 문자열에서 정규 표현식과 일치하는 부분을 다른 문자열로 치환합니다. 복잡한 패턴을 대체하거나 불필요한 문자열을 제거할 때 유용합니다.

예시:

SELECT REGEXP_REPLACE('123-45-6789', '\\D', '') AS digits_only;

이 예시는 숫자가 아닌 모든 문자를 제거하여 '123456789'를 반환합니다.

4. 신규 함수 REGEXP_SUBSTR

[원본제공링크 1]

REGEXP_SUBSTR 함수는 문자열에서 정규 표현식과 일치하는 부분 문자열을 추출합니다. 여러 옵션을 사용하여 일치하는 부분의 위치와 횟수를 지정할 수 있습니다.

예시:

SELECT REGEXP_SUBSTR('apple, banana, cherry', '[a-z]+', 1, 2) AS second_word;

이 예시는 두 번째로 일치하는 단어인 'banana'를 반환합니다.

5. 신규 함수 UUID_TO_BIN

[원본제공링크 1]

UUID_TO_BIN 함수는 문자열 형태의 UUID를 이진 형식으로 변환합니다. 이진 형식으로 저장하면 공간 효율성과 성능이 향상됩니다.

예시:

INSERT INTO my_table (id, data)
VALUES (UUID_TO_BIN('550e8400-e29b-41d4-a716-446655440000'), 'Sample Data');

6. 신규 함수 BIN_TO_UUID

[원본제공링크 1]

BIN_TO_UUID 함수이진 형식의 UUID를 문자열로 변환합니다. 저장된 이진 UUID를 사람이 읽을 수 있는 형태로 표시할 때 사용합니다.

예시:

SELECT BIN_TO_UUID(id) AS uuid, data FROM my_table;
참고 - 위 항목 5번에서 INSERT한 값을 SELECT 하는 경우
mysql> select * from my_table;
+------------------------------------+-------------+
| id                                 | data        |
+------------------------------------+-------------+
| 0x550E8400E29B41D4A716446655440000 | Sample Data |
+------------------------------------+-------------+
1 row in set (0.00 sec)

mysql> SELECT BIN_TO_UUID(id) AS uuid, data
    -> FROM my_table;
+--------------------------------------+-------------+
| uuid                                 | data        |
+--------------------------------------+-------------+
| 550e8400-e29b-41d4-a716-446655440000 | Sample Data |
+--------------------------------------+-------------+
1 row in set (0.05 sec)

7. 신규 함수 IS_UUID

[원본제공링크 1]

IS_UUID 함수는 주어진 문자열이 유효한 UUID 형식인지 검사합니다. 유효성 검사가 필요한 경우 활용할 수 있습니다.

예시:

SELECT IS_UUID('550e8400-e29b-41d4-a716-446655440000') AS is_valid_uuid;

결과는 1이며, 유효한 UUID임을 나타냅니다.

8. 신규 함수 GROUPING

[원본제공링크 1 2]

GROUPING 함수GROUP BYROLLUP 연산자를 사용한 집계 결과에서 소계나 총계를 구분하는 데 사용됩니다. 각 행이 상세 데이터인지 집계 데이터인지 식별할 수 있습니다.

예시:

SELECT department, job_title, SUM(salary) AS total_salary,
       GROUPING(department) AS dept_total, GROUPING(job_title) AS job_total
FROM employees
GROUP BY department, job_title WITH ROLLUP;

이 예시에서는 GROUPING 함수를 통해 부서별, 직책별, 전체 총계를 구분합니다.

9. 신규 함수 STATEMENT_DIGEST

[원본제공링크 1]

STATEMENT_DIGEST 함수는 SQL 문장의 요약 정보를 해시 값으로 생성합니다. 이를 통해 유사한 쿼리를 그룹화하거나 성능 분석에 활용할 수 있습니다.

예시:

SELECT STATEMENT_DIGEST('SELECT * FROM orders WHERE order_id = 123') AS digest;

10. 신규 함수 STATEMENT_DIGEST_TEXT

[원본제공링크 1]

STATEMENT_DIGEST_TEXT 함수는 SQL 문장의 일반화된 형태를 반환합니다. 변수나 리터럴 값을 플레이스홀더로 치환하여 쿼리 패턴을 파악하는 데 유용합니다.

예시:

SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM orders WHERE order_id = 123') AS digest_text;

결과는 'SELECT * FROM orders WHERE order_id = ?'와 같이 반환됩니다.

참고
SQL Digest 기능은 SQL 문장을 표준화된 텍스트 형태로 변환하여 동일한 유형의 쿼리를 그룹화하는 기능입니다. 즉, 위의 예시에서 처럼 where 조건등을 ?로 변경하는등의 처리를 통해 똑같은 형태를 취하고 있는 쿼리로 만들어주는 기능입니다. 
예를들어, 
SELECT STATEMENT_DIGEST('SELECT * FROM orders WHERE order_id = 123') AS digest; 
SELECT STATEMENT_DIGEST('SELECT * FROM orders WHERE order_id = 456') AS digest;   
이 2개의 쿼리는 모두 TEXT형태로 DIGEST하면 
SELECT * FROM `orders` WHERE `order_id` = ?
이 되어 같은 DIGEST값을 갖게 됩니다. 

이렇게 변수를 제외한 쿼리 구조를 해시값(Digest)로 변환하여, 중복 쿼리를 식별하고, 사용 빈도나 자원 소모량을 분석합니다. 이를 통해 데이터베이스 성능 병목을 진단하고 쿼리 실행 계획 최적화에 도움을 주는 등, 주로 SQL 성능 분석과 쿼리 최적화에 사용됩니다.

11. BINARY, VARBINARY, BLOB, TINYBLOB, MEDIUMBLOB 및 LONGBLOB에서 비트 연산 허용

[원본제공링크 1]

비트 연산자를 이제 BINARY, VARBINARY, BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB 타입의 컬럼에서 사용할 수 있습니다. 이를 통해 이진 데이터에 대한 비트 단위의 조작이 가능해졌습니다.

예시:

SELECT data_column & BINARY '10101010' FROM binary_table;

이 예시는 data_column10101010 간의 비트 AND 연산을 수행합니다.

12. TIMESTAMP/DATETIME 값에 시간대 정보 포함 가능

[원본제공링크 1]

TIMESTAMPDATETIME 컬럼에 시간대(Time Zone) 정보를 포함할 수 있게 되었습니다. 이를 통해 전역적인 시간 관리시간대 변환이 더욱 용이해졌습니다.

예시:

SET time_zone = '+00:00';

CREATE TABLE event_schedule (
    event_id INT PRIMARY KEY,
    event_time DATETIME NOT NULL
);

INSERT INTO event_schedule (event_id, event_time)
VALUES (1, '2021-08-01 12:00:00+09:00');  -- 한국 시간대

SELECT event_time, CONVERT_TZ(event_time, '+09:00', 'UTC') AS event_time_utc FROM event_schedule;

결과)
+---------------------+---------------------+
| event_time          | event_time_utc      |
+---------------------+---------------------+
| 2021-08-01 03:00:00 | 2021-07-31 18:00:00 |
+---------------------+---------------------+

이 예시는 event_time을 UTC로 변환하여 조회합니다.

Leave a Comment



이 문서 공유

MySQL 8.0에서 추가된 모든 기능 – 함수

링크 복사

CONTENTS