Database/Mysql 45

[Real MySQL] 8-9. 인덱스: 유니크 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. Unique Index유니크 제약테이블에 특정 컬럼의 값이 중복되지 않도록 보장하는 제약유니크 제약이 설정된 컬럼은 같은 값이 두 번 이상 저장되지 않도록 함인덱스와 밀접한 연관이 있음MySQL에서는 인덱스 없이 유니크 제약을 설정할 수 없음내부적으로 인덱스를 자동으로 생성하여 중복 값 체크를 수행함 Nullable해당 컬럼에 NULL 값이 허용된다는 의미NULL은 특정 값이 없다는 표시이며, 다른 값들과 다르게 취급됨 즉 NULL은 값 없음을 의미할 뿐, 다른 값들과는 비교할 수 없음NULL이 여러 번 있을 수 있음NULL은 특정 값이 아니기 때문에 같은 컬러멩서 두 개 이상의 NULL값이 허용될 수 있음 유니크 인덱스와 일..

Database/Mysql 2024.09.07

[Real MySQL] 5-2. 트랜잭션과 잠금: 격리 수준

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 4. 격리 수준여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지뒤로갈수록 고립도는 높아지고, 동시성과 성능은 떨어집니다. READ UNCOMMITTED동시성 & 성능 높음데이터 일관성  & 정합성 보장 XDirty Read 허용일반적인 DBMS에서 사용 X Dirty Read다른 트랜잭션에서 커밋되지 않은 트랜잭션 내용 읽기 가능 READ COMMITTED다른 트랜잭션에서 커밋된 트랜잭션 내용만 읽기 가능균형 좋음 (동시성 & 성능 - 데이터 일관성 & 정합성)데이터 일관성 문제..

Database/Mysql 2024.08.10

[Real MySQL] 15-4. 데이터 타입: JSON

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. JSON이진 형태일반적인 문자열 저장 방식보다 빠른 검색 및 업데이트 가능 BSON (Binary JSON)NoSQL에서 사용하는 JSON의 바이너리 표현내부적으로 JSON 데이터를 BSON 형식으로 변환하여 읽고 씀 BLOB데이터가 작을 경우, 하나의 페이지에 저장됨데이터가 클 경우, 여러 페이지로 나뉘어 저장됨 (최대 4GB까지) 구조JSON 정보JSON 타입, 애트리뷰트 수, 총 데이터 길이 Key - Value주소(offset), 길이, 값, (타입) 2. 명령어생성CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, info JSON NOT NULL); ..

Database/Mysql 2023.11.26

[Real MySQL] 15-3. 데이터 타입: 날짜와 시간

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 날짜와 시간 설명크기YEAR날짜(YYYY)1 byteDATE날짜(YYYY-MM-DD)3 byteTIME시간(HH:MM:SS.MS)3 ~ 5 byteTIMESTAMP날짜 + 시간 (UTC 기준)4 ~ 7 byteDATETIME날짜 + 시간 (로컬 시간 기준)5 ~ 8 byte날짜, 시간만 저장하거나 날짜와 시간 같이 저장할 수 있습니다. 2. 밀리초 저장괄호괄호안의 숫자는 밀리초 자리 수를 의미함최대 6자리까지 표현할 수 있습니다.2자리당 1바이트씩 공간이 필요합니다. exDATETIME(6) 3. 타임존날짜 타입타임존 정보가 포함되지 않음클라이언트로부터 입력된 값을 그대로 저장하고 조회합니다. 시간 타입TIMESTAMP설정된 ..

Database/Mysql 2023.11.26

[Real MySQL] 15-2. 데이터 타입: 숫자

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 정확도참값정확히 그 값을 그대로 유지하는 것INTEGER, DECIMAL 근삿값 (부동소수점)저장한 값과 조회된 값이 최대한 비슷하게 관리되는 값FLOAT, DOUBLE 2. 포맷이진 표기법숫자를 2진수로 변환해 저장INTEGER, FLOAT, DOUBLE 십진 표기법숫자의 각 자릿값을 4비트 또는 1바이트로 표현DECIMAL 3. 정수 저장공간최솟값최댓값TINYINT1-128127SMALLINT2-3276832767MEDIUMINT3-83886088388607INT4-21474836482147483647BIGINT8-263262값의 범위만 다름 4. 부동 소수점소수점의 위치가 고정적이지 않음큰 수나 작은 수를 효율적으로 표현..

Database/Mysql 2023.11.26

[Real MySQL] 15-1. 데이터 타입: 문자열

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 저장공간CHAR선언한 길이만큼 고정된 크기로 저장됨부족한 공간은 공백으로 채움검색 속도가 빠름 (오버헤드 없음) VARCHAR입력한 데이터 크기 만큼만 저장됨 길이 접두사데이터별 길이 접두사가 추가됩니다.255 바이트 이하: 1바이트256 바이트 이상: 2바이트 저장공간최대 64KB를 저장할 수 있습니다. (길이 접두사 포함)전체 row에 크기 제한이 있습니다.다른 컬럼에서 40KB 이상 사용하고 있다면 나머지 컬럼에선 24KB만 사용할 수 있습니다.24KB를 초과할 경우 TEXT 혹은 BLOB 타입으로 변환됩니다. 2. 대용량 문자열가변 길이 타입입니다.64KB 이상의 데이터를 저장할 때 사용64KB 이상의 데이터는 별도의 ..

Database/Mysql 2023.11.26

[Real MySQL] 8-3. 인덱스: B-Tree

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 특성가장 기본적인 인덱스 타입원래 값을 변형시키지 않는 인덱스B-Tree 형태 리프 노드primary key index: key - recordsecondary key index: key - rowID (PK) 2. 키 추가 및 삭제균형 트리 구조를 유지하면서 데이터를 정렬된 상태로 저장하여 성능을 높임 추가과정저장될 키 값을 이용하여 추가될 위치를 검색루트 노드에서 시작하여 브랜치 노드를 따라가며 적절한 리프 노드까지 이동리프 노드에 저장 예외 처리노드 분할리프 노드가 가득 찰 경우, 키를 반으로 나누어 상위 노드로 승격하여 트리를 균형있게 유지 삭제과정삭제할 키를 검색하여 리프 노드에서 삭제 표시즉시 삭제하지 않고 지연 삭..

Database/Mysql 2023.11.25

[Real MySQL] 8-2. 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 인덱스데이터를 빠르게 찾을 수 있도록 도와주는 자료구조key-value 형식특정 컬럼값을 정렬하여 보관저장될 때마다 값이 항상 정렬됨 KeyPrimary Key행을 대표하는 컬럼들로 이루어진 인덱스 유일성Not Null"키 값-레코드 주소 값"으로 구성됨 Secondary KeyPrimary Key와는 다른 컬럼 조합으로 생성된 인덱스더 빠르게 검색하기 위한 기능 (보조적인 역할)유일성 필수 XNullable"키 값-PK값"으로 구성됨 알고리즘B-Tree 알고리즘 (기본 알고리즘)원래의 컬럼 값을 이용해 인덱싱하는 알고리즘 입니다.균형 이진 트리 구조범위 검색에 매우 효율적 Hash Index 알고리즘컬럼 값을 해시 계산으로 ..

Database/Mysql 2023.11.25

[Real MySQL] 5-1. 트랜잭션과 잠금: 트랜잭션

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 트랜잭션하나의 논리적인 작업 단위로 실행되는 일련의 연산DML 문을 하나의 트랜잭션으로 묶어 실행할 수 있음 특징AtomicAll or Nothing트랜잭션 내의 모든 작업이 완전히 수행되거나, 아예 수행되지 않음중간에 오류가 발생하면 전체 트랜잭션이 롤백됨데이터 정합성 보장Partial Update 방지 목적 Consistency트랜잭션 전후로 데이터베이스가 항상 일관된 상태로 유지됨즉, 데이터베이스의 규칙이 유지됨 (무결성 제약 조건 유지, 외래 키 관계 등) Isolation다른 트랜잭션으로부터 독립적으로 실행됨동시에 실행되는 트랜잭션들은 서로 영향을 주지 않음 Durability성공적으로 트랜잭션이 커밋되면, 모든 변경..

Database/Mysql 2023.11.24

[Real MySQL] 4-4. 아키텍쳐: MySQL 로그 파일

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 에러 로그 파일실행되는 도중에 에러나 경고로 인해 출력되는 메시지 파일을 의미합니다.datadir에 .err 확장자로 생성됨 서버 시작 관련변수명을 인식하지 못한 경우특정 변수가 무시된 경우 트랜잭션 복구 메시지 (비정상적으로 종료된 경우)재처리 작업 과정서버가 비정상적으로 종료된 경우 재시작 시, 트랜잭션 복구를 시도함 완료되지 못한 트랜잭션을 정리서버가 종료되기 전에 완료되지 못한 트랜잭션을 정리하여 데이터 무결성을 유지함 디스크 기록서버가 정상적으로 재시작되었을 때, 복구하는 과정이 로그에 남음 쿼리 에러 메시지쿼리 도중 발생하는 문제점이 기록 커넥션 메시지 (비정상적으로 종료된 경우)클라이언트가 애플리케이션에 접속하지..

Database/Mysql 2023.11.24