mysql 59

[MySQL] GROUP_CONCAT으로 압축한 행 풀기

개요2024.09.10-[MySQL] GROUP_CONCAT - 그룹 별 행 압축에서 특정 컬럼에 대해 그룹 별로 압축하는 GROUP_CONCAT 함수를 알아보았다. 이번 글에서는 JSON_TABLE, JSON_ARRAY를 활용하여 압축한 행을 다시 풀어내는 방법을 적어본다.  예제 데이터다음과 같은 예제 데이터를 사용하여 방법을 적어둔다.| type | names || ------- | -------- || cooker | 뒤집개 || fruit | 수박,사과,사과 | DDL더보기CREATE TABLE objects ( type varchar(50), names varchar(100));INSERT INTO objects VALUES ('cooker ', '뒤집개');INS..

Database 2024.10.11

[MySQL] JSON_TABLE - JSON 데이터를 테이블로 변환

개요2024.09.23-[MySQL] JSON 다루기에서 MySQL에서 JSON 형식의 데이터를 추가하고 조회하는 방법을 알아보았다.이번 글에서는 JSON 데이터를 테이블 형태로 변환하는 함수인 JSON_TABLE 함수의 사용 방법을 적어둔다.  JSON_TABLEJSON_TABLE(expr, path COLUMNS (column_list) [AS] alias)JSON_TABLE은 JSON 데이터를 표형식 데이터로 변환하는 함수로 MySQL 8.0에서 도입되었다. 매개변수는 다음과 같다.- expr : 테이블로 변환할 JSON 데이터- path : 테이블 행을 생성하는데 사용하는 JSON 경로- column_list : 테이블 열을 생성하는데 사용하는 JSON 경로 예시와 함께 사용 방법을 적어둔다.  ..

Database 2024.10.10

[MySQL] JSON 다루기

개요최근 MySQL에서 JSON 데이터를 지원하고 있다는 것을 알게 되었다. 간단히 읽고 쓰는 방법을 확인해 보자.   JSON 타입MySQL 데이터베이스의 테이블에서 JSON 데이터를 다루기 위해서는 테이블 컬럼의 데이터형이 JSON이어야 한다.CREATE TABLE employees ( id integer AUTO_INCREMENT primary key, name VARCHAR(200), profile JSON);  INSERTJSON 데이터는 문자열 또는 JSON_OBJECT를 사용하여 입력할 수 있다. 1. 문자열로 입력하기INSERT INTO employees(name, profile) VALUES ('홍길동', '{ "age" : 30, "gender" : "man", "부서": "개발" }'..

Database 2024.10.08

[MySQL/JDBC] User does not have access to metadata required to determine stored procedure parameter types.

현상JDBC를 통해 MySQL에서 사용 중인 프로시저 정보를 확인하려고 하면 아래와 같은 메시지와 함께 실패하는 경우가 있다.User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.대충 보면 권한 문제처럼 보이는데…… 문제를 해결해보자.   원인에러 메시지..

Database 2024.08.29

[MySQL] DIV - 나눈 몫 계산

개요프로그램에서 동작하고 있는 쿼리를 분석하다 모르는 예약어가 있어 정리해 둔다.  DIVx DIV y DIV는 두 수를 나눴을 때 그 몫을 반환하는 함수이다.(보통 데이터베이스 상에서 사칙연산과 관련된 함수를 쓸 때 괄호 안에 매개변수를 전달해 왔어서 몰랐다…….)두 수를 나눈 실수형 데이터를 반환하는 나눗셈(/) 연산자와 달리, DIV는 두 수를 나눈 몫에 해당하는 정수형 데이터를 얻을 수 있다.   테스트나눗셈 연산자와 DIV의 실행 결과를 비교한다. - 나누어 떨어지는 수SELECT 10 / 5 , 10 DIV 5 실행 결과| 10 / 5 | 10 DIV 5 || ------ | -------- || 2.0000 | 2 |  - 나누어 떨어지지 않는 수SELECT 11 / 5 ..

Database 2024.08.27

[MySQL] 별칭 (Alias)

개요 SQL에서 테이블이나 컬럼에 대해 별칭을 지정하여 간단히 참조할 수 있다는 건 데이터베이스를 알고 있는 사람에게는 기본적인 지식이라고 할 수 있다. 하지만 나는 SELECT나 FROM 절 외의 다른 절에서도 참조할 수 있다는 걸 잘 기억하지 못하기 때문에 굳이 적어둔다. 별칭 SELECT 문에서는 키워드 AS를 사용해 별칭을 부여할 수 있다. 별칭은 표현식의 컬럼 이름이나 GROUP BY, ORDER BY, HAVING 절 등에서 사용할 수 있다. SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP, COUNT(1) AS `PRODUCTS` FROM PRODUCT GROUP BY PRICE_GROUP ORDER BY PRICE_GROUP 별칭은 컬럼 뿐만 아니..

Database 2023.12.20

[MySQL] 집계 함수 ALL, ANY 구현

개요 Python에는 여러 데이터에 대한 참, 거짓을 판단할 때 사용할 수 있는 all, any 함수가 존재한다. 참고 : 2022.10.08 - [Python] any/all - 여러 요소의 참/거짓 확인 비슷한 방식으로 MySQL에서 SQL을 이용해 그룹 별 여러 데이터에 대한 참, 거짓을 판단하고 싶다. 방법을 알아보자. 참고로 Subquery로 제공되는 ALL, ANY가 아니다. 예시 테이블 | month | day | amount | | ----- | --- | ------ | | 1 | 3 | 9000 | | 1 | 5 | 8000 | | 3 | 15 | 20000 | | 6 | 14 | 110123 | | 6 | 18 | 3000 | | 12 | 20 | 101000 | | 12 | 25 |..

Database 2023.11.20

[MySQL] INSERT ~ ON DUPLICATE KEY UPDATE (insert or update)

UPSERT UPDATE, INSERT의 합성어로, 테이블에 추가하고자 하는 데이터의 기준 값이 데이블에 없으면 데이터를 추가하고 있으면 데이터를 갱신하는 것을 의미한다. 즉, INSERT OR UPDATE라고 할 수 있다. 데이터베이스 엔진마다 지원 여부와 문법이 다른데, MySQL은 INSERT ~ ON DUPLICATE KEY UPDATE 문으로 지원한다. INSERT ~ ON DUPLICATE KEY UPDATE INSERT INTO table(key1, key2, col1, col2) VALUES(val1, val2, val3, val4) ON DUPLICATE KEY UPDATE col1 = val3, col2 = val4; INSERT문에 ON DUPLICATE KEY UPDATE을 지정하면..

Database 2023.11.16

[MySQL] SELECT FOR UPDATE

개요 하나의 트랜잭션 내에서 데이터를 쿼리 한 후 관련 데이터를 삽입하거나 갱신하는 경우, 일반적인 SELECT 문은 충분한 보호를 제공하지 않는다. 쿼리 한 데이터와 동일한 데이터를 다른 트랜잭션에서 갱신하거나 삭제할 수 있기 때문에 추가적인 안정성이 필요하다. SELECT FOR UPDATE는 이러한 동시성 문제를 해결하기 위해 InnoDB가 제공하는 locking read 방법 중 하나다. Locking Read InnoDB 테이블에 대해나 잠금 작업을 수행하는 SELECT 문이다. SELECT ~ FOR UPDATE 또는 SELECT ~ LOCK IN SHARE 문 두 가지가 해당된다. locking read는 교착 상태를 발생시킬 수 있으므로 사용에 주의해야 한다. SELECT FOR UPDAT..

Database 2023.10.24

[MySQL] mysql-client login-path 설정

개요 MySQL Client로 접속할 때 접속 정보를 지정해야 하는데 매번 접속 정보를 입력하는 건 번거로운 일이다. 특히 -p 옵션을 사용해 비밀번호를 입력한다면 민감 정보가 불필요하게 노출될 수 있다. 이러한 문제를 해결하기 위해 MySQL 접속 정보를 저장하는 mysql_config_editor을 사용할 수 있는데, 이 글에서는 mysql_config_editor를 이용해 mysql에 하는 방법을 적어둔다. 기존 접속 방법 2022.12.12 - [MySQL] 접속 명령어 기본적으로 mysql 클라이언트를 이용하면 다음과 같은 정보를 지정하여 접속한다. mysql -u -p -h -P 3306 mysql_config_editor 사용 mysql_config_editor은 mysql-client를 사..

Database 2023.10.02