MySQL 9

[MySQL] Error Handling

DB를 사용하다가 에러가 발생한 경험은 서버 개발자라면 무조건 있을 것 같은데요.바로 DBA에게 해당 사실을 공유하거나, 담당 개발자를 부른 경험이 있을까요? 서버 연결이 안돼요~~쿼리 에러 났어요~~ 그런데, 담당자가 부재중이거나 다른 업무로 바쁘다면…?! ㅠㅠ최소한 어떤 에러가 발생했고, 어떻게 하면 에러를 핸들링 할 수있을지 알아 봅시다! MySQL 에러 구분Global Errorserver-side 와 client-side 공용으로 발생Server Errorserver-side 에서만 발생ERROR 1146 (42S02): Table ‘test.no_such_table’ doesn’t exist일부 Server Error는 client-side 로 전달 됩니다.Client Errorclient-s..

[MySQL] 쿼리 실행 구조

쿼리 실행 구조쿼리를 실행하는 관점에서 MySQL의 구조를 간략하게 그림으로 표현하면 위와 같습니다. 이를 기능별로 나눠서 표현하면 아래와 같습니다.쿼리 파서전처리기옵티마이저실행엔진핸들러(스토리지엔진) 기능들에 대해서 상세하게 알아봅시다~! 쿼리 파서쿼리 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰으로 분리하여 트리 형태의 구조로 만들어 내는 작업을 의미 합니다.쿼리 문장의 기본 문법 오류를 발견하고 사용자에게 오류 메시지를 전달합니다. 참고토큰이란 MySQL이 인식할 수 있는 최소 단위의 어휘나 기호를 의미 합니다. 전처리기파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인합니다.각 토큰을 테이블 이름이나 컬럼 이름, 또는 내장 함수와 같은 개체를 매핑하여 해당 ..

[MySQL] Lateral Derived Table 활용하는 방법

Lateral Derived Table 이란?!Derived Table(파생 테이블)은 쿼리의 from 절에서 서브쿼리를 통해 생성되는 임시 테이블을 의미합니다.일반적으로 Derived Table은 선행 테이블의 컬럼을 참조할 수 없으나, Lateral Derived Table은 참조 가능합니다.정의된 Dervied Table 앞부분에 LATERAL 키워드를 추가해서 사용 합니다.참조한 값을 바탕으로 동적으로 결과를 생성할 수 있습니다.  동작 방법select e.emp_no, s.sales_count, s.total_salesfrom employees eleft join lateral( select count(*) as sales_count, ..

[MySQL] Stored Function 에서 많이 하는 실수 방지하기

MySQL FunctionMySQL 함수는 MySQL 서버에 내장되어 있는 Built-in Function과 사용자가 직접 C/C++ 언어로 개발해서 플러그인 할 수 있는 User Defined Function 이 존재합니다.그리고 Stroed Function 이 존재하는데요. MySQL Function 종류Built-in FunctionUser Defined Function(UDF)Stored Function Stored FunctionStored Function는 기본적으로 DETERMINISTIC, NOT DETERMINISTIC 로 구분할 수 있습니다.반드시 둘 중 하나의 속성만 가지게 됩니다. DETERMINISTIC(확정적)동일 상태와 동일 입력으로 호출동일한 결과를 반환여기서 입력은 함수의 ..

[MySQL] left join 아무생각 없이 사용하고 있는 것은 아니지?

inner join 과 left join 개념 체크!아래와 같은 테이블이 존재한다고 합시다! memberidnameteam_id1세웅12임하33민영24민주25소영16영민null7영소null teamidname1서버 개발팀2클라이언트 개발팀3디자인팀 inner joininner join 은 테이블의 교집합을 반환합니다.즉, 테이블간에 모두 존재하는 결과만 반환하게 됩니다.예를 들어 member 와 team 테이블이 존재할 때 inner join을 사용하게 되면, 현재 존재하는 team에 속해있는 member 만 반환하게 됩니다.select m.id, m.name, m.team_id, t.name from member minner join team t on t.id = m.team_id; idnameteam..

[MySQL] VARCHAR vs TEXT

이번에는 VARCHAR 와 TEXT에 대해서 알아봅시다! 🙌 공통점문자열 속성 값을 저장최대 65,535 bytes 까지 저장 가능 차이점VARHCAR 타입 컬럼에는 지정된 글자 수 만큼만 데이터 저장 가능VARCHAR(100) → 100글자 이하만 저장 가능TEXT 타입 컬럼은 인덱스 생성 시 반드시 Prefix 길이 지정 필요CREATE INDEX ix_text_column ON table (text_column(100));TEXT 타입 컬럼은 표현식으로만 디폴트 값 지정 가능CREATE TABLE tb1 (col TEXT DEFAULE ‘abc’) → 에러 발생CREATE TABLE tb1 (col1 TEXT DEFAULT (’abc’)) → 생성 가능 일반적인 사용 형태길이가 짧으면 VARCHA..

[MySQL] CHAR vs VARCHAR

제가 개발을 하면서 DB에 가장 많이 사용하는 타입이 CHAR, VARCHAR 입니다.그런데 CHAR와 VARCHAR의 공통점과 차이점에 대해서 정확하게 알지 못한 상태로가변이면 VARCHAR, 고정이면 CHAR를 사용하면 된다! 정도로 이해하고 사용했습니다.더 이상 이렇게 살면 안될거 같아 정리해야겠다는 마음이 들어서 포스팅을 작성하게 되었습니다. CHAR의 VARCHAR 간단 소개먼저 간단하게 공통점과 차이점에 대해서 정리해보겠습니다!공통점문자열 저장용 컬럼최대 저장 가능 문자 길이 명시 가능! (byte 수가 아님!!)CHAR(10), VARCHAR(10)은 모두 10글자 까지 저장 가능차이점CHAR는 값의 실제 크기에 관계없이 고정된 공간 할당VARCHAR는 값의 실제 크기에 맞게 공간 할당최대 ..

[스프링 DB] MySQL의 트랜잭션 격리 수준(Transaction Isolation Level) 파헤치기

[DB] MySQL의 트랜잭션 격리 수준(Transaction Isolation Level) 파헤치기모든 내용은 InnoDB를 기준으로 설명합니다.^^ 트랜잭션 격리 수준이란? 백엔드 개발자라면 트랜잭션 격리 수준(isolation level)이란 용어를 들어본 적이 있을 것 입니다.그런데 트랜잭션 격리 수준 정확히 뭔가요? 🤔 데이터베이스에는 트랜잭션이 존재합니다.사용자가 많으면 여러 트랜잭션이 존재하게 되는데, 이러한 트랜잭션이 동시에 동일한 데이터를 읽거나 쓰려고할 때 경합하는 동시성이 발생할 수 있습니다.!!여기서, 의문점은 현재 진행 중인 트랜잭션이 진행 중인 또 다른 트랜잭션에서 발생한 변경 사항을 알 수 있을까요?!쉽게 이야기 하면, 1번 트랜잭션이 쿼리를 날려서 읽고, 읽고, 읽고, 읽는..

[패스트캠퍼스] 3. SQL 기초2

2022.12.19 - [데이터베이스/0 + SQL] - [패스트캠퍼스] 2. SQL 기초1 [패스트캠퍼스] 2. SQL 기초1 SQL 기초 조건에 맞는 데이터 가져오기 WHERE WHERE [조건식] 형식으로 사용 WHERE 절이 TRUE 가 되는 행만 선택 SELECT [컬럼명] FROM [테이블명] WHERE [조건식]; MySQL에서는 TRUE 를 1로 표현, FALSE 는 0으로 표 howisitgo1ng.tistory.com SQL 기초2 규칙 만들기 IF IF(조건식, 참결과, 거짓결과) 형식으로 사용 주로 SELECT 절에 사용하는 함수 결과 값을 새로운 컬럼으로 반환 SELECT name, IF(attack >= 60, 'strong', 'weak') AS attack_class FROM..