[바미] MySQL JSON 데이터 조회
·
MySQL(DB)
들어가기전에..MySQL은 5.7 버전부터 JSON 데이터를 효율적으로 저장하고 조회할 수 있는 기능을 제공하고 있습니다. MySQL에서 JSON 데이터를 어떻게 저장하고 조회하는 지 살펴보도록 하겠습니다.MySQL에서 JSON 데이터 타입?JSON(JavaScript Object Notation)은 가볍고 사람이 읽기 쉬운 데이터 교환 형식입니다. MySQL에서는 JSON 데이터 타입을 제공하여 JSON 형식의 데이터를 효율적으로 저장하고 관리할 수 있죠. 구조회된 데이터를 유연하게 저장이 가능하고, 스키마 변경없이 필드를 추가할 수 있고, 복잡한 데이터 구조도 저장이 가능합니다.JSON 데이터 저장우선 JSON 데이터를 저장할 테이블을 만들어보겠습니다.CREATE TABLE users ( id ..
[바미] .ibd과 .frm파일은 쿼리로 삭제하자!
·
MySQL(DB)
A라는 테이블을 파티셔닝 테이블로 만들기 위해 A_temp로 변경 후 새로 A라는 파티셔닝 테이블을 만든 뒤, A 테이블에 A_temp의 데이터를 넣다 오류가 발생하여 A_temp의 테이블을 삭제 후 재생성 하는 과정에서 SQL Error [1050] [42S01]: (conn=429) Table 'schema.A_temp /* Partition p202401 */' already exists라는 에러가 발생하고 맙니다. 구글링을 해보니 테이블 삭제 했을 때 관련된 파티션이 함께 삭제되지 않아 발생한 문제였습니다. 그래서 잔여 파티션 파일이 존재하여 이를 삭제해주어야 했습니다. 이 부분은 보통 /var/lib/mysql/shema안에 있기 때문에 저 역시 이 디렉토리 안에 있는 삭제되지 않은 .ibd과 ..
[바미] 정상적인 SELECT 문을 사용했는데 syntax 에러가 발생할 때
·
MySQL(DB)
BOM(Byte Order Mark)때문에 발생한 원인일 가능성이 높습니다.BOM은 UTF-8 형식의 인코딩에서 파일의 시작 부분에 들어가는 보이지 않는 특수 문자인데 복붙했을 때 인코딩 형식에 따라 자동으로 포함 될 수 있어요.SELECT * FROM table WHERE column = 'text';SELECT * FROM table WHERE column = 'text';위와 같은 SELECT 문이 있는데 첫 번째 쿼리문은 실행됐고, 두 번째 쿼리문은 syntax 에러가 발생하였습니다. 이를 제대로 확인하기 위해 HEX()함수를 사용하여 확인해야 합니다.SELECT HEX('text'); -- 첫 번째 쿼리에서 사용된 값SELECT HEX('text'); -- 두 번째 쿼리에서 사용된 값이 때..
[바미] There is no physical unique key defined. 에러
·
MySQL(DB)
DBeaver를 사용하여 아래 쿼리 형태로 데이터를 조회 후 수정 작업을 하고 있던 중 SELECT [COLUMN NAME] FROM [TABLE NAME] where [조건]; 아래와 같은 에러창이 뜨게 되었습니다.수정하려고 보니 테이블에 고유 키가 없는 상태라 여러 데이터가 지워질 수 있다는 경고창이였다. 따라서 아래와 같은 형태의 쿼리를 조회 후 수정 작업을 하였다.SELECT * FROM [TABLE NAME] WHERE [조건문];
[바미] 데이터베이스 - Join
·
MySQL(DB)
JOIN?JOIN은 데이터베이스에서 두 개 이상의 테이블을 연결하고 결합하여 원하는 데이터를 조회할 때 사용합니다. 이를 통해 테이블 간의 관계를 기반으로 데이터를 결합할 수 있죠. 기본적으로 Join은 교집합입니다.JOIN의 종류INNER JOINLEFT JOIN (LEFT OUTER JOIN)RIGHT JOIN (RIGHT OUTER JOIN)FULL JOIN (FULL OUTER JOIN)CROSS JOINSELF JOIN이제 각각의 아래 테이블 구조를 바탕으로 JOIN의 종류에 대해 자세히 살펴보겠습니다.테이블 구조Employees EmployeeID Name DepartmentID 1John Doe12Jane Smith23Sam Brown1Departments DepartmentID Dep..
[바미] 데이터 파티셔닝
·
MySQL(DB)
DB 파티셔닝(Database Partitioning) 데이터를 효율적으로 관리하고 성능을 향상시키기 위해 데이터를 여러 파티션(부분)으로 나누는 방법입니다. 데이터가 너무 커져서 하나의 테이블이나 인덱스로 관리하기 어려울 때 사용됩니다.파티셔닝의 장단점 장점 성능 개선 - 특정 파티션에 대해서만 작업을 수행하므로 속도가 빨라짐.관리 용이 - 파티션 단위로 백업, 복구 가능.확장성 - 데이터가 증가해도 새로운 파티션을 추가해 확장 가능.단점 복잡성 증가 - 파티션을 관리하기 위한 추가 작업 필요.잘못된 파티셔닝 - 비효율적인 파티셔닝은 오히려 성능을 저하시킬 수 있음. 이제 본격적으로 데이터 파티셔닝의 예를 들어보도록 하겠습니다.원본 데이터아래와 같은 형태의 Orders 테이블이 있다고 가정하겠습니다.O..
[바미] MySQL - 프로시저에 대해 알아봅시다.
·
MySQL(DB)
서론 오늘은 DB 프로시저에 대해 알아보도록 하겠습니다. 간혹 REST API를 처리할 때 사용하기도 하는데 이 프로시저가 어떤 상황에서 유리할 수 있는지 알아보도록 하겠습니다. DB 프로시저? DB 프로시저(Database Procedure)로 부르기도 하고, 저장 프로시저(Stored Procedure)라고 부르기도 하는데 쉽게 설명해서 데이터베이스에서 실행되는 일련의 SQL 문과 선택적 제어문의 집합을 의미합니다. 이러한 프로시저는 특정 작업을 수행하기 위해 SQL 문을 하나의 실행 가능한 블록으로 그룹화 하는데 DB 프로시저는 데이터베이스시스템 내부에 저장되어 있으며, 필요할 때마다 호출하여 사용할 수 있습니다. 프로시저는 데이터 검증, 데이터베이스 내 연산 수행, 복잡한 비즈니스 로직 실행 등에..
[바미] MySQL - Upsert
·
MySQL(DB)
데이터베이스에 레코드를 삽입할 때 해당 레코드의 키가 이미 존재하면 업데이트를 실행하는 기능을 말하는데 중복 삽입을 방지하고, 기존 레코드를 필요에 따라 갱신할 수 있도록 할 때 굉장히 유용한 쿼리에요. MySQL에서는 주로 INSERT ... ON DUPLICATE KEY UPDATE 구문을 사용해요. INSERT ... ON DUPLICATE KEY UPDATE INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...) ON DUPLICATE KEY UPDATE 컬럼1 = 값1, 컬럼2 = 값2, ...; INSERT ... ON DUPLICATE KEY UPDATE 구문은 레코드를 삽입하려 할 때 유니크 제약 조건 (PRIMARY KEY, UNIQUE INDEX..
[바미] MySQL SELECT된 결과를 INSERT하기
·
MySQL(DB)
INSERT INTO 목표테이블 (컬럼1, 컬럼2, ..., 컬럼N) SELECT 컬럼1, 컬럼2, ..., 컬럼N FROM 출처테이블 WHERE 조건; 위와 같은 패턴을 가지고 있는데요. 서로 다른 테이블에 INSERT 할 때 INSERT INTO new_users (id, name, email) SELECT id, name, email FROM users WHERE active = 1;​ users 테이블에서 활성 상태인 사용자들의 id, name, email 정보를 선택하여 new_users 테이블에 삽입되는 예시입니다. INSERT INTO orders_analysis (order_id, order_date, customer_id, total_amount) SELECT order_id, order..
Bami
'MySQL(DB)' 카테고리의 글 목록